2012-02-13 133 views
0

我有一個基本類是非抽象的和兩個基於這個類的類,但他們如何計算結果有不同的實現。基類還繼承自系統中許多不同位置共享的抽象類,所以我無法真正改變這一點。我如何映射繼承與子類

我知道我可以提取所有三個繼承的基類,只是使用普通的子類映射,但我只是想知道是否可以創建映射此場景的hbm文件。

class BaseClass : CalculationBaseClass 
{ 
    public virtual int Calculate() 
    { 
    ... 
    } 
} 

class SpecializedClass : BaseClass 
{ 
    public override int Calculate() 
    { 
     ... 
    } 
} 

class HistoricClass : BaseClass 
{ 
    public override int Calculate() 
    { 
     ... 
    } 
} 
+0

不是100%肯定你試圖achieve-你可以指定你想你的表有哪些結構看起來像? – 2012-02-13 14:53:52

回答

0

從NHibernate的documentation

NHibernate的支持三種基本的繼承映射策略。

  • 每個子類表

    每個具體類

  • 表每類層次結構表

你會選擇的基礎上你當前表的策略之一結構是,或者如果你沒有傳統模式,你可以選擇最合適的模式riate for你的對象模型(例如基於映射的屬性)。在你的情況,如果你使用「每個類層次結構表」,你最終會得到這樣的映射:

<class name="CalculationBaseClass" table="MyTable"> 
    <id name="Id" type="Int64" column="ID"> 
     <generator class="native"/> 
    </id> 
    <discriminator column="TYPE" type="String"/> 

    <subclass name="BaseClass" discriminator-value="BASE"> 
     ... 
    </subclass> 
    <subclass name="SpecializedClass" discriminator-value="SPECIALIZED"> 
     ... 
    </subclass> 
    <subclass name="HistoricClass " discriminator-value="HISTORIC"> 
     ... 
    </subclass> 
</class>