目前我有以下课程:
类文章,包含属性id,标题和正文 class Question:带有额外PostedBy属性的文章
然后我有一个名为Article的表,其中包含上述属性,以及一个名为带有ID的问题的表,一个外键articleID和一个PostedBy。两者都有不同的模式
我想知道我的映射是如何表示这种关系的。这两个类都在不同的程序集中,我非常不愿意将问题逻辑放在Article class / mapping及其程序集中。
答案 0 :(得分:2)
NHibernate支持三种基本的继承策略。
听起来你正在寻找每个子类策略的表,因为你有一个Article类的表和另一个表的Question子类的额外属性。映射可能如下所示:
<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>
然而,这并不符合您希望将映射完全分开的愿望。您可以使用完全独立的映射,但这可能会产生一些副作用,因为允许将问题作为普通文章而不是问题加载。使用单独的映射,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>