2012-01-19 184 views
0

的兒童的我有以下域模型使用ClassMaps/SubclassMaps類映射到抽象類

A至映射 - 的hasMany - > B(A應該是表)

B是在代碼抽象(也應該不成爲表格)

C,D,E繼承B並且都具有非常不同的屬性。他們每個人都應該與外鍵A.表

我得到我想要的表,但我看不出如何從擁有一個屬性實體的地圖HasManyIList<B> SomeProperty

我想定義ClassMap<A>,關於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>超過抽象類動物映射到貓和馬。

+0

好像這個邊緣案例不支持nhibernate。 – Firo

回答

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 
} 
+0

你是對的,在我的例子中缺少代碼,但它仍然不能正常工作,因爲Animal會想要擁有自己的ClassMap(我不想)。我有一個解決方案,其中'動物'的所有子類都映射到'人',直到出現更好的東西。 – Islandwind

相關問題