2010-01-30 88 views
4

我嘗試加載一個樹時出現問題,這是我的情況,我有一個與n級關聯的實體(Hierarchic);問題是,我可以使用ICriteria或HQL熱切加載整棵樹嗎?急於在NHibernate中加載一棵樹

在此先感謝您的幫助。 Ariel

回答

1

是的...只是設置正確的fetchmode。


我會在一分鐘內包含示例。


例採取from here =>

IList cats = sess.CreateCriteria(typeof(Cat)) 
    .Add(Expression.Like("Name", "Fritz%")) 
    .SetFetchMode("Mate", FetchMode.Eager) 
    .SetFetchMode("Kittens", FetchMode.Eager) 
    .List(); 

您可以指定兒童的渴望負載孩子太=>

.SetFetchMode("Kittens.BornOn", FetchMode.Eager) 

在你使用LINQ to NHibernate的情況下,使用擴展方法=>

var feedItemQuery = from ad in session.Linq<FeedItem>().Expand("Ads") 
          where ad.Id == Id 
          select ad; 

而且我會推薦使用helper方法來創建從lambda表達式中傳遞的字符串。


很可能有可能告訴標準加載整個樹。但我不知道這一點,我更喜歡指定我需要什麼(似乎加載一切都很危險)。


this有幫助嗎?

+4

我知道我可以使用FetchMode加載與實體相關的集合,但我想加載整個樹,而不僅僅是下一個級別。 用你的方法,我會做: .SetFetchMode( 「孩子」,FetchMode.JOIN)語句 .SetFetchMode( 「Children.Children」,FetchMode.JOIN)語句 .SetFetchMode( 「Children.Children.Children」 FetchMode.Join)等 – Argons 2010-01-30 12:58:14