2011-10-21 4 views
5

관련 엔터티가 <many-to-one>이고 해당 엔터티에 즉시 가져 오려는 두 개의 <many-to-one>이 있습니다. 나는이 쿼리하여이 작업을 수행 할 수 있습니다 :ThenFetch에서 다중 가져 오기

var tshead = session.Query<MainEntity>() 
       .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Other) 
       .Fetch(r=>r.FirstAssoc).ThenFetch(p=>p.Another) 
       .Take(10) 
       .ToList(); 

당신은 내가에 두 번 .Fetch(r=>r.FirstAssoc) 나는이 문제를 방지 할 수 있습니다 확신하지만 난 방법을 알아낼 질수 작성했다 볼 수 있듯이. 어떤 생각?

감사합니다. 특정 'MainEntity'를 선택하면

+1

'Fetch (r => r.FirstAssoc.Another)'가 작동하지 않는다면 나는 그것을 피할 수 없다고 생각합니다. 의심 스럽습니다. –

+0

@Diego 감사합니다. 의심 스럽습니다 (표현식이 너무 복잡합니다). 그러나 가지고있는 것이 좋을. –

+0

내 FirstAssoc은 컬렉션이므로 FetchMany.ThenFetch.FetchMany.ThenFetch와 똑같은 문제가 있습니다. 이것에 대한 해결책을 좋아할 것입니다. – mikeschuld

답변

3

은 당신이 너무 좋아 QueryOver 사용하여 수행 할 수 있습니다

FirstAssoc firstAssoc = null; 
Other other = null; 
Another another = null; 

tshead = session.QueryOver<MainEntity>() 
       .Where(x => x.Id == id) 
       .JoinAlias(x => x.FirstAssoc,() => firstAssoc) 
       .JoinAlias(() => firstAssoc.Other,() => other) 
       .JoinAlias(() => firstAssoc.Another,() => another) 
       .SingleOrDefault(); 

나는 여기에 대해 서면으로 작성했습니다 :

http://www.philliphaydon.com/2011/04/nhibernate-querying-relationships-are-depth/

당신은 할 수 없습니다 수행

한 많은-많은

1 대 다수.

Many-Many-One 변형이 너무 어려울 수 있습니다.

+0

@Diego - 관심이 있으신가요? – Phill

+0

+1하지만 QueryOver를 사용하고 있습니다. linqtonh를 사용하여 동일한 결과를 얻을 수 있습니까? 추신 : 귀하의 블로그는 정말 흥미 롭습니다 :) –

+0

@Felice - 쿼리 으로 작업을 수행 할 수 있는지 확실하지 않지만, 불가능하다고 생각합니다.하지만 이번 주말에는 내가 얼마나 멀리 볼 수 있는지 알아볼 것입니다. QueryOver를 사용할 수없는 이유는 무엇입니까? 내 블로그에 대한 의견을 주셔서 감사합니다 :) 감사. – Phill