Que loco! era más sencillo de lo que pensé, no se por qué agarré por el rumbo de los Join y Fetch...
Funcionó de 10 Gracias Fabio 2011/5/4 Fabio Maulo <[email protected]> > session.Query<Alquiler>().Select(a=> a.Propiedad.Propietario).ToList(); > > > 2011/5/4 Fabio Maulo <[email protected]> > >> select a.Propiedad.Propietario from Alquiler a >> >> >> 2011/5/4 Jose Selesan <[email protected]> >> >>> Buenas, gente. Tengo un problema para hacer una consulta con NH 3. Tengo >>> una clase Alquiler, que tiene una property Propiedad. La clase Propiedad >>> tiene una property Propietario (que es de tipo Cliente). Lo que quiero hacer >>> es traerme todos los clientes cuyas propiedades están en alquiler, pero >>> evitando el select n+1 >>> >>> Si hago esto: >>> Session.Query<Alquiler>().Fetch(a => a.Propiedad).ThenFetch(x => >>> x.Propietario).Select(a => a.Propiedad.Propietario).ToList() >>> >>> Me da la siguiente excepción: >>> >>> Query specified join fetching, but the owner of the fetched association >>> was not present in the select list [FromElement{explicit,not a collection >>> join,fetch join,fetch non-lazy >>> properties,classAlias=_1,role=,tableName=Propiedades,tableAlias=propiedad1_,origin=Alquileres >>> alquiler0_,colums={alquiler0_.IDPropiedad >>> ,className=GestionerInmobiliarias.Dominio.Propiedad}}] >>> [.Select[GestionerInmobiliarias.Dominio.Alquiler,GestionerInmobiliarias.Dominio.Cliente](.ThenFetch[GestionerInmobiliarias.Dominio.Alquiler,GestionerInmobiliarias.Dominio.Propiedad,GestionerInmobiliarias.Dominio.Cliente](.Fetch[GestionerInmobiliarias.Dominio.Alquiler,GestionerInmobiliarias.Dominio.Propiedad](NHibernate.Linq.NhQueryable`1[GestionerInmobiliarias.Dominio.Alquiler], >>> Quote((a, ) => (a.Propiedad)), ), Quote((x, ) => (x.Propietario)), ), >>> Quote((a, ) => (a.Propiedad.Propietario)), )] >>> >>> También probé de usar QueryOver con JoinAlias, pero tampoco me funcionó. >>> >>> Obviamente, si hago esto: >>> >>> Session.Query<Alquiler>().Fetch(a => a.Propiedad).ThenFetch(x => >>> x.Propietario).ToList().Select(a => a.Propiedad.Propietario) >>> >>> Funciona correctamente y hace un solo viaje a la DB, pero estoy >>> hidratando un montón de objetos (la clase Alquiler es bastante compleja) >>> para quedarme con solamente los clientes. >>> >>> Gracias! >>> >>> -- >>> Para escribir al Grupo, hágalo a esta dirección: >>> [email protected] >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> >> >> >> >> -- >> Fabio Maulo >> >> > > > -- > Fabio Maulo > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
