nhibernate queryover没有急切地加载多对多的joinalias

时间:2010-11-01 20:30:30

标签: nhibernate

我正试图在我的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错误还是我做错了什么?

2 个答案:

答案 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,您将过滤集合元素,因此无法初始化。

如果您打算使用预先加载,则需要使用子查询进行过滤。在同一个集合上。