私は問題があります。次のデータ モデルを想像してください。
[Person] table has: PersonId, Name1
[Tag] table has: TagId, TagDescription
[PersonTag] has: PersonId, TagId, IsActive
[PersonTag]
単純な多対多結合テーブルではないため、3 つのエンティティすべてを nHibernate で作成しました (データ モデルにあるのとまったく同じです) 。PersonTag
したがって、次のようなクラスにマップした複合 ID が必要です。
<composite-id name="PersonTagKey" class="PersonTagKey">
<key-property name="PersonId"></key-property>
<key-property name="TagId"></key-property>
</composite-id>
オブジェクト グラフをトラバースして、取得したオブジェクトからPerson
とオブジェクトの両方を確認できるようにしたいと考えています。そのため、オブジェクトにそれを行うためのプロパティがあり、次のようにマッピングされています。Tag
PersonTag
PersonTag
<many-to-one name="Person" column="PersonId" lazy="proxy" cascade="none" class="Person"/>
<many-to-one name="Tag" column="TagId" lazy="proxy" cascade="none" class="Tag"/>
PersonTag
オブジェクトを作成して保存しようとすると、 「Count=n のこの SqlParameterCollection のインデックス n が無効です」というエラーが表示されます。これは、複合 ID 用に 1 回、多対 1 の関係用に 1 回、プロパティを 2 回PersonId
マップしたためです。TagId
多対 1 のオブジェクトをマップしなければ、すべてうまくいきます。
同じ nHibernate エンティティでモデル化された同じ列に基づいて、複合 ID と多対 1 の関係を持つことができる方法はありますか?