select a.Propiedad.Propietario from Alquiler a

2011/5/4 Jose Selesan <jsele...@gmail.com>

> 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:
> NHibernate-Hispano@googlegroups.com
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano




-- 
Fabio Maulo

-- 
Para escribir al Grupo, hágalo a esta dirección: 
NHibernate-Hispano@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a