10

NHibernate を使用して多対多の関係を作成しようとしています。これらを XML ファイルにマップする方法がわかりません。クラスはまだ作成していませんが、基本的な POCO になります。

テーブル


の personId

コンピテンシー コンピテンシー
ID
タイトル

Person_x_Competency
personId
コンピテンシーID

基本的に、他のクラスの各 POCO にリストを作成しますか? 次に、NHibernate 構成ファイルを使用して何らかの方法でそれらをマップしますか?

4

1 に答える 1

23

多対多の関係をいずれかのクラスに配置することも、両方に配置することもできます。これはドメイン モデル次第です。両方にマッピングすると、一方が逆になります。

class Person
{
  // id ...
  IList<Competency> Competencies { get; private set; }

  // you domain model is responsible to manage bidirectional dependencies.
  // of course this is not a complete implementation
  public void AddCompetency(Competency competency)
  {
    Competencies.Add(competency);
    competency.AddPerson(this);
  }
}

class Competency
{
  // id ...
  IList<Person> Persons { get; private set; }
}

マッピング:

<class name="Person">
  <id ....>
  <bag name="Competencies" table="Person_x_Competency">
    <key column="personId"/>
    <many-to-many class="Competency" column="competencyId"/>
  </bag>
</class>

<class name="Competency">
  <id ....>
  <bag name="Persons" table="Person_x_Competency" inverse="true">
    <key column="competencyId"/>
    <many-to-many class="Person" column="personId"/>
  </bag>
</class>

本当に必要な場合にのみ、双方向にしてください。

ところで、最初にクラスを作成し、後でデータベース設計を作成する方がはるかに優れています。データベースは、マッピング ファイルからエクスポートできます。これは非常に便利です。

于 2010-04-27T14:34:10.337 に答える