问题描述
|
这是基于旧系统的。
我有以下表格:
CREATE TABLE a
id int
CREATE TABLE b
a_id int,c_id int
relationshipid int -- must be IN (1,2,3)
CREATE TABLE c
id int
我想要以下域模型
public class A
{
public int Id { get; set; }
public C entityc { get ; set; }
}
public class C
{
public int Id { get; set; }
}
设置表b的目的是,对于一个特定的已定义的Relationshipid,(一对应该是)一对ID。对于其他关系,通过B的一对一映射不成立。 Relationshipid可以是少量值之一。
如何使用流利的NHIbernate将关系C为1的关系从实体C归入A类?
作为附带的问题,我在这里试图做的事情有名字吗?最初的方法是尝试使用带有Join表的HasOne并过滤结果,但是显然失败很惨。
编辑:阐明了RelationshipID和目的。
解决方法
我认为最简单的映射方法是使表b成为实体,并对该实体中的A和C都进行引用,并将RelationshipId作为id。因此,您的映射如下所示:
public class A
{
public int Id { get; set; }
public IList<B> bEntities { get; set; }
}
public class ClassAMap : ClassMap<A>
{
public AMap()
{
Table(\"A\");
Id(x => x.Id);
HasMany(x => x.bEntities)
.KeyColumns.Add(\"a_id\");
}
}
public class B
{
public virtual int RelationshipId { get; set; }
public virtual A InstanceA { get; set; }
public virtual C InstanceC { get; set; }
}
public class ClassBMap : ClassMap<B>
{
public BMap()
{
Table(\"B\");
Id(x => x.RelationshipId,\"relationshipid\");
References(x => x.InstanceA);
References(x => x.InstanceC);
}
}
编辑:
如果您希望将这些结果筛选为将A实体中B实体的集合仅筛选为与RelationshipId = 1匹配的结果,那么您应该看一下以下文章:
流利的NHibernate并在需要多个联接的查询上过滤一对多关系?
您也可以在A类中执行以下操作:
public class A
{
public int Id { get; set; }
public IList<B> bEntities { get; set; }
public C InstanceC
{
get { return bEntities.First<B>(x => x.RelationshipId == 1).InstanceC; }
}
}