我有一个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的了解还很不成熟。
这可能吗?
答案 0 :(得分: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();
答案 1 :(得分: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