2011-10-21 23 views
5

<many-to-one> ile ilişkili bir varlık var ve bu varlığın bir kerede almak istediğim iki tane <many-to-one> var. Bu sorgu tarafından bunu başarabilirsiniz:ThenFetch birden çok getirme

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

ben iki kez .Fetch(r=>r.FirstAssoc) Bunu önlemek eminim ama nasıl anlamaya olamaz yazdı vardı görebileceğiniz gibi. Herhangi bir fikir ?

Teşekkürler! Belirli bir 'MainEntity' seçerseniz

+1

Fetch (r => r.FirstAssoc.Another) işlevinden şüphe etmedikçe, bundan kaçınabilirsiniz. –

+0

@Diego teşekkürler, şüpheniz onaylandı (ifade çok karmaşık istisna). Ama sahip olmak güzel olurdu. –

+0

Bu aynı sorunu var, benim FirstAssoc bir koleksiyon olmasına rağmen FetchMany.ThenFetch.FetchMany.ThenFetch. Buna bir çözüm isterim. – mikeschuld

cevap

3

o zaman şöyle QueryOver kullanarak yapabilirsiniz:

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(); 

Bu konuyu burada yazdım:

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

Yapamazsın yapın:

Tek Birçok-Birçok

sadece Tek Bir Çok.

Çok-Çok-One yapabileceğinizden emin değilim, bu çok zor olurdu.

+0

@Diego - İlgilendiğinizden beri CC. – Phill

+0

+1, ancak QueryOver kullanıyorsunuz, linqtonh ile aynı şeyi yapabilir miyiz? PS blogunuz gerçekten ilginçtir :) –

+0

@Felice - Query ile yapabileceğinizden emin değilim, bunun mümkün olmadığından şüpheleniyorum, ama bu hafta sonu alabileceğim bir maç yapacağım. QueryOver kullanamazsınız herhangi bir sebep? Benim blog hakkında yorum için teşekkürler :) takdir. – Phill

İlgili konular