我正试图在我的User对象的多对多集合中加载角色。
Role role = null;
IQueryOver<User, User> query = session.QueryOver<User>()
.Fetch( p => p.Roles).Eager
.JoinAlias( q => q.Roles, () => role)
.Where(() => role.Active == true);
给我留下了未初始化角色成员的用户对象。如果我删除joinalias,它们初始化就好了。这只是一个NH3错误还是我做错了什么?
答案 0 :(得分:13)
另一种令人满意的加载方式是设置LeftOuterJoin。它在similar scenario
中帮助了我们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);
答案 1 :(得分:1)
这是预期的行为。如果您使用JoinAlias,您将过滤集合元素,因此无法初始化。
如果您打算使用预先加载,则需要使用子查询进行过滤。在同一个集合上。