流利的Nhibernate内部联接

时间:2011-10-27 13:36:44

标签: c# nhibernate mapping inner-join fluent

我有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

关于如何进行内部加入的任何想法? 提前致谢

2 个答案:

答案 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>();

编辑:套管如下所述改变。