每个类的表nhibernate映射用于继承。怎么样?

时间:2013-01-13 08:37:17

标签: nhibernate-mapping

我经历了几个NHibernate映射教程,但这部分对我来说似乎并不复杂。我在ayende的网站上找到的一个是使用超类中的歧视值来解释每个班级的表格。就我而言,我没有使用歧视值。

我该如何映射?

我有类似以下的类结构。

enter image description here

两者,'学生'和老师'课程继承自“人”。抽象类。我需要将每个类映射到一个表而不使用超类中的歧视值。

1 个答案:

答案 0 :(得分:1)

假设有三个表:PersonTableStudentTableTeacherTable。我们可以使用

映射到 PersonTable 的基类将包含公共属性,并生成ID。将为 StudentTable TeacherTable 提供来自父母的ID

<class name="Person" table="PersonTable" abstract="true">
  <id name="PID" type="Int32" column="PersonId">
    <generator class="native"/>
  </id>

  <!-- common properties of a Person -->
  <property name="FirstName" />
  <property name="LastName" />
  <property name="DOB" />
  <property name="Gender" />

    <!-- Student and its own table -->
    <joined-subclass name="Student" table="StudentTable">
      <key column="SutdentID"/> <!-- Filled with PersonId value from a base -->
      <property name="Grade" />
    </joined-subclass>

    <!-- Teacher and its own table -->
    <joined-subclass name="Teacher" table="TeacherTable">
      <key column="TeacherId"/><!-- Filled with PersonId value from a base -->
      <property name="Subjects" />
    </joined-subclass>    
</class>

现在我们每个超级和子类都有表,没有鉴别器