0

HasMany 엔티티 B와 엔티티 C가있는 엔티티 A가 있습니다. 모든 엔티티 A, B 및 C는 열심히로드해야하는 참조 x, y 및 z가 있습니다.기준 API를 사용하여 NHibernate에서 열심히 컬렉션을로드하십시오

데이터베이스에서 모든 엔티티 A를 읽고 B 및 C 콜렉션을 기준 API를 사용하여 열심히로드하고 싶습니다. 지금까지 'A'에서 참조를 열심히 가져올 수 있습니다. 그러나 콜렉션이로드 될 때 콜렉션이 지연로드됩니다. 여기

내가 아래와 같이 유창함이 사용하는 엔티티 (A)의이

  AllEntities_A = 
      _session.CreateCriteria(typeof(A)) 
      .SetFetchMode("x", FetchMode.Eager) 
      .SetFetchMode("y", FetchMode.Eager) 
      .List<A>().AsQueryable(); 

매핑 할 방법이다. _B와 _C는 각각 A.

내가 매핑 파일을 변경하지 않으
 Id(c => c.SystemId); 
     Version(c => c.Version); 
     References(c => c.x).Cascade.All(); 
     References(c => c.y).Cascade.All(); 

     HasMany<B>(Reveal.Property<A>("_B")) 
      .AsBag()     
      .Cascade.AllDeleteOrphan() 
      .Not.LazyLoad() 
      .Inverse() 
      .Cache.ReadWrite().IncludeAll(); 
     HasMany<C>(Reveal.Property<A>("_C")) 
      .AsBag() 
      .Cascade.AllDeleteOrphan() 
      .LazyLoad() 
      .Inverse() 
      .Cache.ReadWrite().IncludeAll(); 

에서 B & C에 대한 개인 ILists, 그리고 열심히 전체 엔티티 A를로드하고 싶습니다. 즉, 목록이있는 A의 목록을 가져와야합니다. B 및 C의 목록도 참조 속성이 열성적으로로드됩니다.

답변

3

여기서 데카르트 제품을 사용하려고합니다. 나는 가방이 중복을 허용하기 때문에 NHibernate가 관계를 bag 대신에 sets로 매핑 할 필요가 있다고 생각한다.

어쨌든, 직교 제품은 매우 비효율적입니다. 대신 다중 쿼리 또는 차후 쿼리를 사용하십시오.

참조 :

+0

감사합니다. 방금 내가 취한 접근법을 확인했습니다. – Zuber

관련 문제