【问题标题】:NHibernate - why is this collection not initialized / eager fetched?NHibernate - 为什么这个集合没有初始化/急切地获取?
【发布时间】:2013-04-24 13:26:15
【问题描述】:

考虑到这一点:

var pfs = Session.QueryOver<Pegfile>()
                .JoinAlias(pf => pf.Responses, () => responseAlias)
                .List();

紧随其后

Debug.Print(pfs.First().Responses.Count.ToString());

为什么那个调试语句会让 NHibernate 返回并重新查询 Response 集合,它肯定是在第一个查询中初始化的?

【问题讨论】:

    标签: nhibernate eager


    【解决方案1】:

    你需要使用Fetch来预加载收藏:

    var pfs = Session.QueryOver<Pegfile>()
                    .JoinAlias(pf => pf.Responses, () => responseAlias)
                    .Fetch(pf => pf.Responses).Eager
                    .List();
    

    JoinAlias 为集合设置别名,以便您可以在 where 子句等中引用它。

    我不确定 QueryOver,但 LINQ 提供程序还使用了一些会导致无法加载集合的优化,例如在调用 Count 时发出 SQL 聚合 COUNT 查询。

    【讨论】:

      【解决方案2】:

      每次都找我,为什么我不记得了? 加入必须是左撇子 - 对 NH 的爱与恨是同等的。

      var pfs = Session.QueryOver<Pegfile>()
                      .Left.JoinAlias(pf => pf.Responses, () => responseAlias)
                      .List();
      

      【讨论】:

        猜你喜欢
        • 2011-06-24
        • 2021-11-17
        • 1970-01-01
        • 2012-12-17
        • 1970-01-01
        • 2010-11-24
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多