Nhibernate查询JoinAlias无关实体

Nhibernate查询JoinAlias无关实体,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在NHibernate中遇到一个问题,关于使用“JoinAlias”的左连接,我要查找的结果查询SQL是: "select * from EntityA T1 left join EntityB T2 on T2.EntityAId=T1.id" 在NHibernate我有这个但不起作用: var query = _session.QueryOver(() => EntityA) .Left.JoinAlias(() => Entit

我在NHibernate中遇到一个问题,关于使用“JoinAlias”的左连接,我要查找的结果查询SQL是:

"select * from EntityA T1 left join EntityB T2 on T2.EntityAId=T1.id"
在NHibernate我有这个但不起作用:

 var query = _session.QueryOver(() => EntityA)
                      .Left.JoinAlias(() => EntityA, () => EntityB.EntityA)
在NHibernate中,
EntityA
不引用
EntityB
,而是
EntityB
作为对
EntityA
的引用

public class EntityA
{ 
   public int Id {get;set;}
}

public class EntityB
{ 
   public int Id {get;set;}
   public EntityA EntityA {get;set;}
}

如何在HHibernate中实现这个非常简单的左连接?

这在
标准
查询
中是不可能的。但是我们可以使用HQL,它确实支持这一点

  • (小引用和片段)
可能会出现多个类,导致笛卡尔乘积或“交叉”联接

因此,在上述情况下,我们将有如下HQL:

FROM EntityA T1 
   , EntityB T2 
WHEERE T2.EntityAId = T1.id
差不多

但在上述情况下,存在反向关系,已经映射。这意味着,我们可以扩展C#实体定义:

public class EntityA
{ 
   public int Id {get;set;}
   // one-to-many
   // the bidirectional mapping of the below relation
   public IList<EntityB> EntityBColl { get; set; }
}

public class EntityB
{ 
   public int Id {get;set;}
   // many-to-one
   // this is the inversed end in fact of the bidirectional mapping
   public EntityA EntityA {get;set;}
}

谢谢,然后我将尝试将集合列添加到实体。
public class EntityA
{ 
   public int Id {get;set;}
   // one-to-many
   // the bidirectional mapping of the below relation
   public IList<EntityB> EntityBColl { get; set; }
}

public class EntityB
{ 
   public int Id {get;set;}
   // many-to-one
   // this is the inversed end in fact of the bidirectional mapping
   public EntityA EntityA {get;set;}
}
// aliases
EntityA EntityA = null;
EntityB EntityB = null;

// query
var query = session.QueryOver(() => EntityA)
    .Left.JoinAlias(() => EntityA.EntityBColl , () => EntityB)
    ...
    ;