NHibernate - 为什么这个集合没有初始化/急切提取?

时间:2013-04-24 13:26:16

标签: nhibernate eager

考虑到这一点:

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

接下来是

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

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

2 个答案:

答案 0 :(得分:3)

您需要使用Fetch预加载集合:

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

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

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

答案 1 :(得分:0)

每次都抓住我,为什么我不记得? 加入必须是一个左撇子 - grr爱和恨NH同等程度。

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