Nhibernate查询JoinAlias无关实体
我在NHibernate中遇到一个问题,关于使用“JoinAlias”的左连接,我要查找的结果查询SQL是: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
"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,它确实支持这一点
- (小引用和片段)
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)
...
;