我有3张桌子(Master,Imagen,Linea):
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; }
我需要这样的查询:
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
但我不知道如何告诉Fluent Nhibernate使用automapper创建此查询。 到目前为止,我已经尝试过这个:
ICriteria c = session.CreateCriteria(typeof(Master))
.CreateAlias("dbo.Imagen", "img", JoinType.InnerJoin)
.Add(Restrictions.Eq("img.linea_id", id_linea));
return c.List<Master>();
但是我收到了这个错误: 无法解析属性:dbo:ImageManager.Model.Entity.Master
关于如何进行内部加入的任何想法? 提前致谢
答案 0 :(得分:8)
首先,我将从dbo.Imagen中删除dbo。使用ICriteria接口,您需要考虑对象而不是数据库表,即使可能存在一对一的对象到表和属性到列的映射。
修改强>
另一种选择是使用QueryOver Lambda语法。
var list = session.QueryOver<Master>()
.JoinQueryOver(master => master.imagen)
.Where(imagen => imagen.linea.Id == 5)
.List();
答案 1 :(得分:3)
如果您已经修复过,我无法解决之前的评论,但我会尝试
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<Master>();
编辑:套管如下所述改变。