Fluent nhibernate 类映射到抽象类的子类
我使用类映射/子类映射映射以下域模型 A-HasMany->B(A应该是表格) B在代码中是抽象的(不应该是表) C、 D,E继承了B,并且都有非常不同的属性。每个表都应该是一个表,外键为a 我得到了我想要的表,但是我看不到如何从具有一个属性的实体A映射Fluent nhibernate 类映射到抽象类的子类,fluent-nhibernate,nhibernate-mapping,Fluent Nhibernate,Nhibernate Mapping,我使用类映射/子类映射映射以下域模型 A-HasMany->B(A应该是表格) B在代码中是抽象的(不应该是表) C、 D,E继承了B,并且都有非常不同的属性。每个表都应该是一个表,外键为a 我得到了我想要的表,但是我看不到如何从具有一个属性的实体A映射HasMany 我想在ClassMap中定义SomeProperty级联在C、D、E上 这显然不起作用,在ClassMap中: HasMany(x=>x.B).Cascade.All() HasMany(x=>x.B).Cascade.All()
HasMany
我想在ClassMap
中定义SomeProperty
级联在C、D、E上
这显然不起作用,在ClassMap
中:
HasMany(x=>x.B).Cascade.All()代码>
HasMany(x=>x.B).Cascade.All()代码>
HasMany(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
}
公共类人物
{
公共虚拟IList动物{get;set;}
公共动物(动物)
{
动物。添加(动物);
}
}
公共抽象类动物
{
//一些共同特性
}
公猫:动物
{
//猫的一些特性
}
公共级马:动物
{
//一些马的财产
}
在本例中,我希望ClassMap
映射到抽象类Animal之上的Cat和Horse。似乎nhibernate不支持这种边缘情况。您是对的,我的示例中缺少代码,但它仍然无法工作,因为Animal希望拥有自己的类映射(我不想要)。我有一个解决方案,所有“动物”的子类都映射到“人”,直到出现更好的东西。
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
}