Unión interna de Nhibernate fluido

Tengo 3 mesas (Master, Imagen, Linea) fueron:

Master
public virtual int Id { get; private set; }
public virtual Imagen imagen { get; set; }

Imagen
public virtual int Id { get; private set; }
public virtual Linea linea { get; set; }

Linea
public virtual int Id { get; private set; }
public virtual String Nombre { get; set; }

Necesito una consulta como esta:

SELECT * FROM dbo.Master 
INNER JOIN dbo.Imagen ON dbo.Master.imagen_id = dbo.Imagen.Id 
INNER JOIN dbo.Linea ON dbo.Imagen.linea_id = dbo.Linea.Id 
WHERE dbo.Linea_Id = 5

Pero no sé cómo decirle a Fluent Nhibernate que cree esta consulta usando el automatizador. Hasta ahora he intentado esto:

ICriteria c = session.CreateCriteria(typeof(Master))
  .CreateAlias("dbo.Imagen", "img", JoinType.InnerJoin)
  .Add(Restrictions.Eq("img.linea_id", id_linea));

return c.List();

Pero me sale este error: No se pudo resolver la propiedad: dbo de: ImageManager.Model.Entity.Master

¿Alguna idea sobre cómo hacer una unión interna? Gracias por adelantado

3

2 Respuestas

Para empezar me libraría del dbo de dbo.Imagen. Usando la interfaz de ICriteria, debe pensar en términos de objetos, no de tablas de base de datos, aunque puede haber una asignación de objeto a tabla y de propiedades a columnas.

EDIT:
another option would be to use the QueryOver Lambda syntax.

   var list = session.QueryOver()
                        .JoinQueryOver(master => master.imagen)
                        .Where(imagen => imagen.linea.Id == 5)
                        .List();
8
agregado
Lo siento por eso ... todavía estoy aprendiendo la sintaxis de QueryOver. Arreglará.
agregado el autor Nathan Fisher, fuente
fijo. He probado esto. Debería funcionar ahora.
agregado el autor Nathan Fisher, fuente
Gracias, Alredy hizo eso. Realmente soy nuevo en Fluent Nhibernate.
agregado el autor lloiacono, fuente
Intenté esto pero me sale este error: "no se pudo resolver la propiedad: imagen.linea.Id de: ImageManager.Model.Entity.Master" También cambié a .Where (Master => Master.imagen.linea.Id == 5 ) pero me sale el mismo error
agregado el autor lloiacono, fuente
funciona !!!, muchas gracias. De todos modos, termino usando ICriteria porque necesitaba obtener las imágenes y las líneas relacionadas con ese maestro, por eso agregué createalias para imagen y hdd. mi objeto maestro
agregado el autor lloiacono, fuente
Aquí está el código: ICriteria c = session.CreateCriteria (typeof (MasterHdd)) .CreateAlias ​​("imagen", "img", JoinType.InnerJoin) .CreateAlias ​​("hdd", "h", JoinType.InnerJoin) .CreateAlias ​​( "img.linea", "lin", JoinType.InnerJoin) .Add (Restrictions.Eq ("lin.Id", id_linea)); return c.List ();
agregado el autor lloiacono, fuente

No puedo resolver sus comentarios anteriores si ya lo ha arreglado, pero lo intentaría.

ICriteria c = session.CreateCriteria(typeof(Master))

.CreateAlias("imagen", "img", JoinType.InnerJoin)
.CreateAlias("img.linea", "lin", JoinType.InnerJoin)
.Add(Restrictions.Eq("lin.Id", 5));

return c.List();

EDITAR: Casing cambiado como se indica a continuación.

3
agregado
¿Cuál es el mensaje de error que recibe?
agregado el autor fluent, fuente
Buen lugar. Casing cambió en mi respuesta.
agregado el autor fluent, fuente
Creo que el único problema con esta respuesta será el caso de las referencias de objetos. tienes Imagen donde @lloiacono tiene su referencia de objeto, todo en minúscula - imagen. La referencia de línea será la misma. Esa puede ser la razón por la que no funciona.
agregado el autor Nathan Fisher, fuente
Eche un vistazo a las series de verano de nhibernate de stephen bohlen, ya tienen algunos años, pero los conceptos básicos están ahí para la ICriteria y el nhibernate en general. También eche un vistazo a funnelweblog.com es una plataforma de blog de código abierto basada en fluent-nhibernate
agregado el autor Nathan Fisher, fuente
Muchas gracias, actualmente estoy trabajando en esto. El problema es que no está funcionando. Este es el error que recibo: "no se pudo resolver la propiedad: Imagen de: ImageManager.Model.Entity.Master" Estoy usando Automapping to Map everythin en la carpeta del modelo: .Mappings (m => m.AutoMappings.Add (modelo))) en la carpeta modelo tengo una subcarpeta llamada Entidad y ahí tengo las entidades:
agregado el autor lloiacono, fuente
Clase pública Master {ID de int virtual pública {obtener; conjunto privado; } pública virtual Imagen imagen {obtener; conjunto; } public virtual Hdd hdd {get; conjunto; } cadena virtual pública hash_master {get; conjunto; }}
agregado el autor lloiacono, fuente
clase pública Linea {public virtual int Id {get; conjunto privado; } public virtual int ObjVersion {get; conjunto; } Public String virtual Nombre {get; conjunto; } Tabla de cuerdas virtual pública {obtener; conjunto; } Public String virtual NombreCorto {get; conjunto; }} clase pública Imagen {ID de int virtual pública {obtener; conjunto privado; } Public Virtual String PartNumber {get; conjunto; } versión de cadena virtual pública {get; conjunto; } cadena pública virtual Entonces {obtener; conjunto; } revisión de cadena virtual pública {get; conjunto; } linea virtual pública linea {get; conjunto; } Public String virtual Nombre {get; conjunto; }}
agregado el autor lloiacono, fuente
Gracias @NathanFisher ese fue el problema. Ya no me sale el error, ¿podría recomendarme un buen manual para hablar con fluidez? Leí el wiki pero no puedo encontrar nada sobre Icriteria.
agregado el autor lloiacono, fuente