0

我有一个 NHibernate 分离标准查询,它有几个内部连接,当我得到它生成的 SQL 语句时,它似乎在投影中有很多我实际上不需要的列。最烦人的是这会对性能产生重大影响。

例如,生成的查询可能看起来像

    select a.a, a.b, a.c .... a.z,
    b.a, b.b, b.c .... b.z
    from ...
    where...

但我真正想要的是

    select a.*
    from ...
    where...

我试图通过使用结果转换器或其他方法找到任何可能帮助我解决此问题的资源,因为我对标准 api 的了解还很不成熟。

这可能吗 ?

4

2 回答 2

1

在数据库上选择 * 不是最佳实践。你会发现无休止的评论引用它。所以宁愿避免选择 *. 您可以使用 QueryOver 或 Linq 语法在 NHibernate 中使用投影,并且只为您需要的列生成 SQL 选择。

           var trades = _session.QueryOver<Trade>()
              .SelectList(list => list
                                        .Select(x => x.Name))
              .List<object>();

或者

            var trades = _session.Query<Trade>()
                  .Select(x => new
                                     {
                                           x.Name
                                     })
                  .ToList();
于 2012-07-05T13:18:32.570 回答
0
  query.SetProjection(ResultProjectionList);
  query.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(typeof(Result)));

像魅力一样工作:-)

这篇文章也有很大帮助

http://www.skimedic.com/blog/post/2009/02/03/Using-Projections-and-Transformers-in-NHibernate.aspx

于 2012-07-05T13:25:17.923 回答