我有3个课程,我正在尝试使用流利的nHibernate进行映射,但我已经碰壁了。我在A类中有一个集合,它引用了B类,B也有一个对A的引用。所以这是一个多对一的关系。我的问题是A还引用了C(扩展了B),并且因为它已经引用了A(通过B),所以我不想创建一个新属性来实现一对多A和C之间的关系。这可能还是我必须在C中创建第二个属性?
public class A
{
public virtual IList<B> AllBInstances { get; set; }
public virtual C ActiveC { get; set; }
}
public class B
{
public virtual A Parent { get; set; }
}
public class C : B
{}
答案 0 :(得分:2)
这里给出的例子是映射
class AMap : ClassMap<A>
{
public AMap()
{
Id(x => x.Id);
HasMany(x => x.AllBInstances)
.KeyColumn("A_id")
.Cascade.All();
References(x => x.ActiveC);
}
}
class BMap : ClassMap<B>
{
public BMap()
{
Id(x => x.Id);
References(x => x.Parent, "A_id");
}
}
class CMap : SubclassMap<C>
{
public CMap()
{
}
}
会给你
table "A" (
Id integer,
ActiveC_id INTEGER,
primary key (Id)
)
table "B" (
Id integer,
A_id INTEGER,
primary key (Id)
)
table "C" (
B_id INTEGER not null,
primary key (B_id)
)