如何将继承映射到子类

时间:2012-02-13 10:45:50

标签: nhibernate inheritance mapping subclass

我有一个非抽象的基类和两个基于这个类但在计算结果方面有不同实现的类。基类还继承自在系统中许多不同位置共享的抽象类,因此我无法真正改变那个。

我知道我可以提取所有三个继承自的基类,只使用带子类的法线映射,但我只想知道是否可以创建映射此场景的hbm文件。

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

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

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

1 个答案:

答案 0 :(得分:0)

来自NHibernate documentation

  

NHibernate支持三种基本的继承映射策略。

     
      
  • 每个类层次结构的表

  •   
  • 每个子类的表

  •   每个具体类
  •   

您可以根据当前表结构选择其中一种策略,或者如果您没有旧模式,则可以选择最适合您对象模型的策略(例如,基于映射属性) 。在您的情况下,如果您使用“每个类层次结构的表”,您最终会得到这样的映射:

<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>