考虑到这一点:
var pfs = Session.QueryOver<Pegfile>()
.JoinAlias(pf => pf.Responses, () => responseAlias)
.List();
接下来是
Debug.Print(pfs.First().Responses.Count.ToString());
为什么调试语句会让NHibernate返回并重新查询Response集合,当然它是在第一个查询中初始化的?
答案 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();