2012-02-13 121 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>