一方では順序が重要であるが、他方では重要ではない双方向の多対多マッピングに苦労しています。
Program と Student の 2 つのクラスがあります。
プログラムには多くの学生がいて、順序が重要です。
プログラムA
- ジョン
- サリー
- セス
プログラムB
- アレックス
- セス
- エイミー
- ジョン
学生には多くのプログラムがありますが、ここでは順序は重要ではありません。
ジョン * プログラム A * プログラム B
サリー
- プログラムA
セス
- プログラムA
- プログラムB
アレックス
- プログラムB
エイミー
- プログラムB
したがって、プログラムと学生の間に双方向の多対多の関連付けがあり、このようなことができるようです...
var john = GetJohn();
var programCount = john.Programs.Count; // 2
var programB = GetProgramB();
var studentCount = programB.Students.Count; // 4
var secondStudent = programB.Students[1]; // Seth
マッピングを機能させる方法がわかりません。PK 違反エラーが発生し続けます。
私は次のことを試しました...
プログラムのマッピング
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Program" table="Programs" lazy="false">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Title" column="Title" type="String" length="200" />
<list name="Students" table="ProgramAssignments" lazy="true" cascade="all">
<key column="ProgramID" />
<index column="SequenceIndex" type="Int32" />
<many-to-many column="StudentID" class="Student" />
</list>
</class>
</hibernate-mapping>
生徒のマッピング
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Student" table="Students" lazy="false">
<id name="ID" column="ID" type="Int32" unsaved-value="0">
<generator class="identity" />
</id>
<property name="Title" column="Title" type="String" length="200" />
<bag name="Programs" table="ProgramAssignments" lazy="true">
<key column="StudentID" />
<many-to-many column="ProgramID" class="Program" />
</bag>
</class>
</hibernate-mapping>
私の連想表は非常に単純です...
ProgramID int
StudentID int
SequenceIndex int
PK は ProgramID + StudentID です。
各プログラムは学生の順番が大事なので、ぜひプログラム側で協会を運営してほしいです。しかし、mystudent.Programs を介して特定の学生のプログラムにアクセスできるようにしたいと本当に思っています。プログラム リストで inverse=true を設定したり、さまざまなカスケード オプションを試したりするなど、マッピングのさまざまなバリエーションを試しましたが、何も機能していないようです。
ヘルプ!ありがとう!