优化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可以帮助

+0

太棒了,我来试一试 – ulu 2010-11-25 16:42:49