NHibernate-为什么未初始化/获取此集合?

NHibernate-为什么未初始化/获取此集合?,nhibernate,eager,Nhibernate,Eager,考虑到这一点: var pfs = Session.QueryOver<Pegfile>() .JoinAlias(pf => pf.Responses, () => responseAlias) .List(); 为什么调试语句会让NHibernate返回并重新查询响应集合,因为它肯定是在第一次查询中初始化的?每次都会得到我,为什么我不记得了加入必须是一个左撇子-grr爱与恨NH的比例相等 var pfs

考虑到这一点:

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

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

每次都会得到我,为什么我不记得了加入必须是一个左撇子-grr爱与恨NH的比例相等

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

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

var pfs = Session.QueryOver<Pegfile>()
                .JoinAlias(pf => pf.Responses, () => responseAlias)
                .Fetch(pf => pf.Responses).Eager
                .List();
var pfs=Session.QueryOver()
.JoinAlias(pf=>pf.Responses,()=>responseAlias)
.Fetch(pf=>pf.Responses)
.List();
JoinAlias
为集合添加别名,以便您可以在where子句中引用它,等等

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

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