2009-07-16 2 views
1

나는 다음과 같은 클래스 구조가 있습니다NHibernate를 가진 aggregate의 손주자를 열망하는 방법?

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

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

class Action { } 

나는 TestCase를로드 할 모든 Step들, 그리고 하나 개의 쿼리의 모든 Event들과 선택 N + 1 문제를 피할 수 있습니다.

This post

은 ( IMultiQuery 사용) TestCase들과 함께 Step의로드의 문제를 해결하지만, 내가 어떻게 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(); 
관련 문제