我有一个不是抽象的基类和两个基于这个类的类,但它们在计算结果的方式上有不同的实现。基类还继承了一个在系统中许多不同地方共享的抽象类,所以我无法真正更改它。
我知道我可以提取一个三者都继承的基类,只使用带有子类的普通映射,但我只想知道是否有可能创建一个映射此场景的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>