2011-10-21 69 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) 我相信我能避免這一點,但我無法弄清楚如何。任何想法 ?

謝謝!

+1

我不認爲你可以避免它,除非'Fetch(r => r.FirstAssoc.Another)'有效,我懷疑。 –

+0

@Diego謝謝,你的疑問得到證實(表情太複雜了)。但它會很高興。 –

+0

我有這個完全相同的問題,雖然我的FirstAssoc是一個集合,所以它是FetchMany.ThenFetch.FetchMany.ThenFetch。會喜歡這個解決方案。 – mikeschuld

回答

3

如果您選擇一個特定的 'MainEntity',那麼您可以在使用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/

你不能這樣做:

一多對多

only One-Many-One

我不確定你可以做Many-Many-One,轉換太難了。

+0

@Diego - 你可能會對CC感興趣。 – Phill

+0

+1,但您使用的是QueryOver,我們可以通過linqtonh實現嗎? PS你的博客真的很有趣:) –

+0

@Felice - 不知道你是否可以用查詢做到這一點,我懷疑這是不可能的,但我會在這個週末有一個戲看看我能得到多遠。任何原因您無法使用QueryOver?感謝有關我的博客的評論:)讚賞。 – Phill