2010-11-01 61 views
4

我想加載我的用戶對象的許多集合中的角色。nhibernate查詢不加載熱切地與多對多的連詞

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

給我留下了具有未初始化角色成員的用戶對象。如果我刪除了連詞,它們初始化就好了。這只是一個NH3錯誤還是我做錯了什麼?

回答

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); 
+0

我不認爲你真正需要的'.Fetch(P => p.Roles).Eager'這裏。左連接顯然是熱切的加載。 http://puredotnetcoder.blogspot.ie/2011/09/queryover-eager-loading-parent-and.html – 2016-01-21 14:10:59

1

這是預期的行爲。如果您使用JoinAlias,則會過濾收集元素,因此無法初始化。

如果您打算使用急切加載,則需要使用子查詢進行過濾。在同一個集合上。

相關問題