2012-07-05 42 views
0

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

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

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

但是我其实想要知道的就是

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

我试图找到任何资源,可帮助我解决这个使用结果变换器或其他方法,因为我对标准API的了解相当不成熟。

这可能吗?

回答

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(); 
+0

感谢。但这不是我期望的答案:-) – TWickz 2012-07-10 05:06:27

+0

这个答案完全符合你的要求。 – Chev 2012-07-10 08:56:55

+0

我遇到了一些由于延迟加载而未正确加载的属性的问题,当我使用这个接近。这就是为什么我使用自定义dto和结果转换器。 – TWickz 2012-07-10 09:46:53