ClassMap到抽象类的子节点

时间:2012-01-19 10:45:18

标签: fluent-nhibernate nhibernate-mapping

我有以下域模型要使用ClassMaps / SubclassMaps

进行映射

A - HasMany - > B(A应该是表格)

B代码是抽象的(不应该是表格)

C,D,E继承B,并且所有属性都非常不同。它们中的每一个都应该是一个带有A的外键的表。

我得到了我想要的表格,但我看不到如何从实体A中映射HasMany,其中有一个属性IList<B> SomeProperty

我想在ClassMap<A>中定义{C},C,D,E上的SomeProperty级联

这显然不起作用,ClassMap<A>

HasMany<C>(x => x.B).Cascade.All();

HasMany<D>(x => x.B).Cascade.All();

HasMany<E>(x => x.B).Cascade.All();

因为我无法复制B。

示例:

public class Person
{
   public virtual IList<Animal> Animals { get; set; }

  public void AddAnimal(Animal animal)
  {
     Animals.Add(animal);
  }
}

public abstract class Animal
{
//some common properties
}

public class Cat : Animal
{
//some cat properties
}
public class Horse : Animal
{
//some horse properties
}

在这种情况下,我希望ClassMap<Person>在抽象类Animal上映射到Cat和Horse。

1 个答案:

答案 0 :(得分:0)

Try...

public void AddAnimal(Animal animal)
{
    animal.Person = this; //Recomended 
    Animals.Add(animal);
}


public abstract class Animal
{
     public virtual Person Person {get;set;} //Recomended Addition
//some common properties
}