2009-07-16 81 views
1

我有下面的類結構:如何用NHibernate加載一個聚集的孫子孫女?

class TestCase { 
    public IList<Step> Steps { get; set; } 
} 

class Step { 
    public IList<Action> Actions { get; set; } 
} 

class Action { } 

我想加載一個TestCase,所有Step s和所有Event S IN一個查詢,避免選擇N + 1點的問題。

This post解決了TestCase秒(使用IMultiQuery)加載Step S的問題,但我怎麼會加載Action太?

回答

1

你需要小心你的交叉產品。要處理超過一個深度的搶先取水,您需要使用集合<集合>而不是<包包>或<列表>。這將保證您的測試用例中沒有重複的「步驟」。最後,使用以下方法:


var result = session.CreateCriteria(typeof (TestCase)) 
       .CreateAlias("Steps", "s") 
       .CreateAlias("s.Actions", "a") 
       .SetResultTransformer(CriteriaUtil.DistinctRootEntity); 
       .List(); 
0

您可以完全按照所討論的內容進行操作。只是Add第二個標準的第二條件,而不是他們在第一條標準。

var result = session.CreateMultiCriteria() 
      .Add(criteria1 
       .Add(criteria2) 
      ) 
      .List();