代码之家  ›  专栏  ›  技术社区  ›  ulu

优化NHibernate查询

  •  0
  • ulu  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  0
  •   samy    14 年前

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

    可能是这样的:

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

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


    事实上,如果您不愿意停止使用linq to nhibernate,我建议您研究linq to nhibernate的连接。也许 this post 可以帮忙