1

考虑到这一点:

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

其次是这个

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

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

4

2 回答 2

3

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

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

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

我不确定 QueryOver 但 LINQ 提供程序还使用了几种优化,这些优化会导致集合无法加载,例如COUNT在调用Count.

于 2013-04-24T13:33:36.527 回答
0

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

var pfs = Session.QueryOver<Pegfile>()
                .Left.JoinAlias(pf => pf.Responses, () => responseAlias)
                .List();
于 2013-04-24T13:30:38.300 回答