nhibernate queryover不急于加载多对多joinalias

nhibernate queryover不急于加载多对多joinalias,nhibernate,Nhibernate,我试图从我的用户对象的多对多集合中加载角色 Role role = null; IQueryOver<User, User> query = session.QueryOver<User>() .Fetch( p => p.Roles).Eager .JoinAlias( q => q.Roles, () => role)

我试图从我的用户对象的多对多集合中加载角色

Role role = null;
IQueryOver<User, User> query = session.QueryOver<User>()
                                .Fetch( p => p.Roles).Eager
                                .JoinAlias( q => q.Roles, () => role)
                                .Where(() => role.Active == true);
Role-Role=null;
IQueryOver query=session.QueryOver()
.Fetch(p=>p.Roles).Eager
.JoinAlias(q=>q.Roles,()=>role)
.Where(()=>role.Active==true);

给我留下了具有未初始化角色成员的用户对象。如果删除joinalias,它们的初始化就很好。这只是NH3 bug还是我做错了什么?

这是预期的行为。如果使用JoinAlias,将筛选集合元素,因此无法初始化它


如果要使用即时加载,则需要使用子查询进行筛选。在同一个集合上。

另一种进行快速加载的方法是设置LeftOuterJoin。它在很大程度上帮助了我们

Role-Role=null;
IQueryOver query=session.QueryOver().Fetch(p=>p.Roles).急切
.JoinAlias(q=>q.Roles,()=>role,JoinType.LeftOuterJoin)
.Where(()=>role.Active==true);

我认为您实际上并不需要
.Fetch(p=>p.Roles).Eager
这里。左连接显然完成了急切的加载。
Role role = null;
IQueryOver<User, User> query = session.QueryOver<User>().Fetch( p => p.Roles).Eager
                                                        .JoinAlias( q => q.Roles, () => role, JoinType.LeftOuterJoin)
                                                        .Where(() => role.Active == true);