2011-10-21 19 views
5

Tengo una entidad asociada con <many-to-one> y esa entidad tiene dos <many-to-one> que quiero buscar a la vez. Puedo lograr esto mediante esta consulta:Múltiple búsqueda en 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(); 

Como se puede ver que tenía que escribió dos veces .Fetch(r=>r.FirstAssoc) Estoy seguro de que puedo evitar esto, pero no puedo encontrar la manera. Alguna idea ?

Gracias!

+1

No creo que puedas evitarlo, a menos que funcione 'Fetch (r => r.FirstAssoc.Another)', lo cual dudo. –

+0

@Diego gracias, su duda está confirmada (expresión excepción demasiado compleja). Pero sería bueno tenerlo. –

+0

Tengo exactamente el mismo problema, aunque mi FirstAssoc es una colección, así que es FetchMany.ThenFetch.FetchMany.ThenFetch. Me encantaría una solución para esto. – mikeschuld

Respuesta

3

Si selecciona un 'MainEntity' específica a continuación, puede hacerlo utilizando QueryOver así:

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

que he escrito sobre ello aquí:

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

No se puede hacer:

Uno-mucho-mucho

solamente One-Many-One.

No estoy seguro de que pueda hacer Many-Many-One, transformando eso sería demasiado difícil.

+0

@Diego - CC ya que puede estar interesado. – Phill

+0

+1, pero está utilizando QueryOver, ¿podemos lograr lo mismo con linqtonh? PD: tu blog es realmente interesante :) –

+0

@Felice - No estoy seguro si puedes hacerlo con Query , sospecho que no es posible, pero voy a tener una obra este fin de semana para ver qué tan lejos puedo llegar. ¿Alguna razón por la que no puedes usar QueryOver? Gracias por el comentario sobre mi blog :) apreciado. – Phill

Cuestiones relacionadas