如何将A类中的集合和属性映射到B / C类中的单个属性

时间:2011-10-12 04:27:10

标签: nhibernate fluent-nhibernate

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

1 个答案:

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