如何用子类映射继承



我有一个不是抽象的基类和两个基于这个类的类,但它们在计算结果的方式上有不同的实现。基类还继承了一个在系统中许多不同地方共享的抽象类,所以我无法真正更改它。

我知道我可以提取一个三者都继承的基类,只使用带有子类的普通映射,但我只想知道是否有可能创建一个映射此场景的hbm文件。

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

来自NHibernate文档:

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>

最新更新