2012-02-13 19 views
0

私は抽象クラスではない抽象クラスと、このクラスに基づいているが、結果の計算方法が異なる2つのクラスを持っています。また、ベースクラスは、システムの多くの異なる場所で共有される抽象クラスから継承されるため、実際に変更することはできません。継承をサブクラスでマップする方法

3つすべてが継承するベースクラスを抽出して、サブクラスとの通常のマッピングを使用することができますが、このシナリオをマップするhbmファイルを作成できるかどうかを知りたいだけです。 NHibernateはdocumentationから

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

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

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

あなたが達成しようとしていることを100%ように見える構造? –

答えて

0

NHibernateのは、3つの基本的な継承のマッピング戦略をサポートしています。

  • クラス階層ごとのテーブル

  • サブクラスごとのテーブル

  • 具象クラスごとのテーブル

あなたは何を、現在のテーブルに基づいて戦略の一つを選ぶだろうあなたがレガシーなスキーマを持っていない場合は、最も魅力的なものを選ぶことができますオブジェクトモデルのために(たとえば、マップされたプロパティに基づいて)リレートします。あなたのケースでは、 'table per class hierarchy'を使用すると、次のようなマッピングになります:

<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> 
関連する問題