优化NHibernate查询

时间:2010-11-25 11:28:19

标签: nhibernate optimization

我有以下代码(显然)给了我巨大的性能问题,我寻求如何使其更好的建议。我的想法是,对于列表中的每个基本项,我查看是否至少有一个派生项,如果没有,我创建一个。问题是,对于每个基本项,都有一个单独的数据库查询:

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;
}

你会如何改进这种代码?

1 个答案:

答案 0 :(得分:0)

如果您使用Criteria,则可以在条件中添加别名以预取查询的联接。

它会是这样的:

DetachedCriteria.For(GetType(MyQueriedType)).CreateAlias("DerivedItem", "d", SqlCommand.JoinType.LeftOuterJoin)

显然,您可以通过重复该过程继续从其他表中获取更多信息。不要忘记将下一个别名映射到任何可能的别名。


事实上,如果你不愿意停止使用linq来进行nhibernate,我建议你查看linq到nhibernate的连接。也许this post可以提供帮助

相关问题