Proyecciones de NHibernate: cómo proyectar un valor desde dentro de las asociaciones

Estoy tratando de proyectar un valor único de la asociación de una entidad sin suerte. solo quiero el Nombre de la ciudad de TrainerAddress en la consulta a continuación. La dirección del entrenador se asigna como un componente del entrenador.

session.QueryOver<Trainer>()
   .JoinAlias(x=>x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin)
   .OrderBy(x => x.Name).Asc
   .SelectList(list => list
        .Select(x => x.Id).WithAlias(() => dto.Id)
        .Select(x => x.Name).WithAlias(() => dto.Name)
        .Select(x => x.TrainerAddress.City.Name).WithAlias(() => dto.City))//issue projecting here
  .TransformUsing(Transformers.AliasToBean<TrainerDTO>())
  .List<TrainerDTO>();

¿Es esto posible?

preguntado el 02 de julio de 12 a las 08:07

parece posible ¿Cuál es el problema exacto? -

1 Respuestas

¿Está especificando un alias para TrainerAddress.City pero no usa ese alias en ninguna parte? No estoy 100 % seguro de que NHibernate admita bien los componentes en QueryOver. Sé que hubo algunos problemas al usar Criteria, pero tal vez esto funcione:

session.QueryOver<Trainer>()
   .JoinAlias(x=> x.TrainerAddress.City, ()=> cityAlias, JoinType.LeftOuterJoin)
   .OrderBy(x => x.Name).Asc
   .SelectList(list => list
        .Select(x => x.Id).WithAlias(() => dto.Id)
        .Select(x => x.Name).WithAlias(() => dto.Name)
        .Select(x => cityAlias.Name).WithAlias(() => dto.City))
  .TransformUsing(Transformers.AliasToBean<TrainerDTO>())
  .List<TrainerDTO>();

Respondido 02 Jul 12, 16:07

Buenísimo Martín. Especifico la unión a la carga ansiosa. Parece que usar el alias funcionó y parece que no puede navegar usando x.TrainerAddress.City.Name - samuel goldenbaum

Me alegra saber que funcionó. Supongo que han mejorado el soporte para componentes :) - Martín Ernst

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.