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

Responder a