0

いくつかの NHibernate マッピング チュートリアルを実行しましたが、それでもこの部分は少し複雑に思えます。私が ayende の Web サイトで見つけたものは、スーパー クラスで識別値を使用してクラスごとのテーブルを説明していました。私の場合、識別値を使用していません。

これをどのようにマッピングできますか?

次のようなクラス構造があります。

ここに画像の説明を入力

'Student' クラスと 'Teacher' クラスはどちらも 'Person' 抽象クラスから継承されます。スーパークラスで識別値を使用せずに、各クラスをテーブルにマップする必要があります。

4

1 に答える 1

1

PersonTableStudentTable、 の3 つのテーブルがあるとしTeacherTableます。を使用できます

PersonTableにマップされた基本クラスには、共通のプロパティが含まれ、ID生成されます。StudentTableTeacherTableには、親からの 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>

これで、ディスクリミネータなしで、スーパー クラスとサブ クラスごとにテーブルができました。

于 2013-01-14T11:44:58.010 に答える