优化NHibernate查询
问题描述:
我得到了下面这段代码(很明显)会给我带来巨大的性能问题,并且寻求如何使它更好的建议。这个想法是,对于列表中的每个基础项目,我查看是否至少有一个派生项目,如果没有,我创建一个。问题是,对于每一个基本项目有一个单独的数据库查询:优化NHibernate查询
var derivedItems = from item in baseItems select item.GetDerivedItem(session);
其中
public virtual DerivedListItem GetDerivedItem(ISession session)
{
var items = session.Query<DerivedItem>()
.Where(item => item.BaseItem == this);
if (items.Any())
return items.First();
var newItem = new DerivedItem(this);
session.Save(newItem);
return newItem;
}
如何改善这种代码?
答
如果使用Criteria,则可以向条件添加别名以预取查询的连接。
它会去是这样的:
DetachedCriteria.For(GetType(MyQueriedType)).CreateAlias("DerivedItem", "d", SqlCommand.JoinType.LeftOuterJoin)
显然,进而你就可以通过repeasting过程中得到来自其他表进一步信息。不要忘记将下一个别名映射到任何潜在的别名。
由于事实上,如果你不愿意停止使用LINQ to NHibernate的,我建议你寻找到加入了的LINQ to NHibernate的。也许this post可以帮助
太棒了,我来试一试 – ulu 2010-11-25 16:42:49