2012-07-26 14 views
5

Estoy tratando de recuperar todas las colecciones (producto no cartesiano) de una entidad principal, pero no puedo averiguar cómo obtener los nietos. estructura de la tabla se ve así:NHibernate, obtenga la colección nietos utilizando QueryOver w/Future

enter image description here

El código siguiente obtiene mis padres y sus colecciones child1 y CHILD2, así como su colección ParentChild3, pero no sé cómo estructurar la consulta para obtener los nietos Niño3 (y diferirlos 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 relacionado: ¿esta es la mejor manera de obtener todas las colecciones? ¿Es mejor (y posible) usar una consulta que obtenga el resultado con join?

Respuesta

2

cómo llegar Children3: Semi-relacionado

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

: Es la mejor manera que conozco.

Si la tabla ParentChild no tiene columnas adicionales, entonces puede asignarla como estándar manytomany. NHibernate no necesitará entidades para la tabla de enlaces y será más fácil la búsqueda ansiosa.

+0

Por desgracia, debe asignar como compuesto (y mientras éste no tiene columnas de carga útil, otros lo hacen), por lo que no se puede salir con ManyToMany. – heyseuss

Cuestiones relacionadas