2011-10-21 15 views
5

Ho un'entità associata con <many-to-one> e quell'entità ha due <many-to-one> che voglio recuperare contemporaneamente. Posso realizzare questo da questa query:Recupero multiplo in 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(); 

Come potete vedere ho dovuto scritto due volte .Fetch(r=>r.FirstAssoc) Sono sicuro che posso evitare questo, ma non posso capire come. Qualche idea ?

Grazie!

+1

Non penso che tu possa evitarlo, a meno che 'Fetch (r => r.FirstAssoc.Altro)' funzioni, cosa di cui dubito. –

+0

@Diego grazie, il tuo dubbio è confermato (espressione troppo complessa). Ma sarebbe bello avere. –

+0

Ho esattamente lo stesso problema, anche se il mio FirstAssoc è una raccolta quindi è FetchMany.ThenFetch.FetchMany.ThenFetch. Mi piacerebbe una soluzione a questo. – mikeschuld

risposta

3

Se si seleziona una specifica 'MainEntity' allora si può fare utilizzando QueryOver in questo modo:

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

che ho scritto su di esso qui:

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

Non è possibile fare:

uno-molti-molti

solo One-Many-One.

Non sono sicuro che tu possa fare Many-Many-One, trasformarlo sarebbe troppo difficile.

+0

@Diego - CC perché potresti essere interessato. – Phill

+0

+1, ma stai usando QueryOver, possiamo ottenere lo stesso con linqtonh? PS il tuo blog è davvero interessante :) –

+0

@Felice - Non sono sicuro che tu possa farlo con Query , ho il sospetto che non sia possibile, ma avrò una recita questo fine settimana per vedere fino a che punto posso arrivare. Qualche ragione per cui non puoi usare QueryOver? Grazie per il commento sul mio blog :) apprezzato. – Phill