2012-07-26 13 views
5

Sto provando a recuperare tutte le collezioni (prodotto non cartesiano) di un'entità padre, ma non riesco a capire come ottenere i nipoti. Struttura della tabella assomiglia:NHibernate, ottieni la collezione di nipoti usando QueryOver w/Future

enter image description here

Il codice seguente ottiene la mia madre e le sue collezioni child1 e child2, così come la sua collezione ParentChild3, ma non so come strutturare la query per ottenere i nipoti Child3 (e rimandarli a Future()).

var parent = _session 
    .QueryOver<Parent>() 
    .Where(x => x.Id == id) 
    .Future<User>(); 

var children1 =_session 
    .QueryOver<Parent>() 
    .Where(x => x.Id == id) 
    .Fetch(x => x.Children1).Eager 
    .Future<Parent>(); 

var children2 =_session 
    .QueryOver<Parent>() 
    .Where(x => x.Id == id) 
    .Fetch(x => x.Children2).Eager 
    .Future<Parent>(); 

var parentChildren3 =_session 
    .QueryOver<Parent>() 
    .Where(x => x.Id == id) 
    .Fetch(x => x.ParentChildren3).Eager 
    .Future<Parent>(); 

// how to get children3, now? 

return parent.SingleOrDefault(); 

Semi-correlati: è questo il modo migliore per ottenere tutte le collezioni? È meglio (e possibile) utilizzare una query che ottenga invece il risultato con i join?

risposta

2

Come arrivare bambini3:

ParentChildren alias = null; 
var parentChildren3 =_session 
    .QueryOver<Parent>() 
    .Where(x => x.Id == id) 
    .JoinAlias(x => x.ParentChildren3,() => alias) 
    .Fetch(() => alias.Children3).Eager 
    .Future<Parent>(); 

Semi-correlati: E 'il modo migliore che conosco.

Se la tabella ParentChild non ha colonne aggiuntive, è possibile mapparla come standard molte. NHibernate non avrà bisogno di entità per la tabella dei link e quindi il recupero andger sarà più facile.

+0

Purtroppo devo mappare come composito (e mentre questo non ha colonne di carico utile, altri fanno), così ho non posso farla franca con ManyToMany. – heyseuss

Problemi correlati