NHibernateは、3つの基本的な継承戦略をサポートしています。
- クラス階層ごとのテーブル
- サブクラスごとのテーブル
- 具象クラスごとのテーブル
あなたはサブクラス戦略ごとのテーブルを探しているようにあなたがあなたの記事のクラスのためのテーブルを持っているように聞こえます質問サブクラスの余分なプロパティの別のテーブル。マッピングは次のようになる可能性があります。
<class name="Article" table="Article">
<id name="Id" type="Int64" column="ArticleId">
<generator class="native"/>
</id>
<property name="Title" column="Title"/>
<property name="Body" column="Body"/>
...
<joined-subclass name="Question" table="Question">
<key column="ArticleId"/>
<property name="PostedBy" column="PostedBy"/>
...
</joined-subclass>
</class>
ただし、これはマッピングを完全に分離したままにしたいという希望には合いません。あなたは完全に別々のマッピングを持つことができますが、Questionに代わってQuestionを普通のArticleとしてロードできるようにする副作用があります。個別のマッピングを使用すると、Articleクラスは期待どおりに簡単に進むことができます。 Questionクラスには、Articleテーブルに格納されているプロパティにアクセスするための結合が含まれます。
<class name="Article" table="Article">
<id name="Id" type="Int64" column="ArticleId">
<generator class="native"/>
</id>
<property name="Title" column="Title"/>
<property name="Body" column="Body"/>
...
</class>
<class name="Question" table="Question">
<id name="Id" type="Int64" column="QuestionId">
<generator class="native"/>
</id>
<property name="PostedBy" column="PostedBy"/>
...
<join table="Article">
<key column="ArticleId"/>
<property name="Title" column="Title"/>
<property name="Body" column="Body"/>
</join>
</class>