2009-08-07 147 views
0

可能是一個愚蠢的問題,但我有許多實體都從基礎實體繼承。基本實體在數據庫中沒有表格。每個實體都有自己的表格,表格定義完全相同。代碼的極簡化示例如下。流利的NHibernate/NHibernate繼承問題

public abstract class BaseEntity 
{ 
    public virtual string someProperty {get; set;} 
} 

public class Entity1 : BaseEntity{} 

public class Entity2 : BaseEntity{} 

public class CompletelyDifferentEntity 
{ 
    public virtual IList<BaseEntity> {get; set;} 
} 

我創建了實體的映射。在我的其他領域類中,如果我引用具體類一切正常,但如果我將其他類更改爲引用BaseEntity,而我得到一個映射異常,因爲BaseEntity未映射。這是我應該使用子類鑑別器的東西嗎?我想我沒有看到正確的方法來做到這一點,如果基地沒有關聯的表和子類沒有一個特定的列在表定義之間不同。

回答

1

您必須使用三種可用的繼承映射策略之一。從你的描述中,你應該考慮使用table-per-concrete-class映射,或者改變你的db方案。

您可以在這裏找到更多關於策略利弊的信息:https://www.hibernate.org/hib_docs/nhibernate/html/inheritance.html

+0

我會更多地研究一下每個具體表的映射。不幸的是,改變數據庫方案將不起作用,因爲有幾個預先存在的系統依賴於現有的模式。 – 2009-08-07 12:49:12