私は NHibernate に非常に慣れていないので、子オブジェクトのリストを保存しているときに問題が発生しています。
ノート
<class name="Note" table="NOTE">
<id name="NoteID" column="NOTE_ID">
<generator class="identity" />
</id>
...
<list name="Sections" table="NOTE_SECTIONS" cascade="all" lazy="false">
<key column="NOTE_ID"/>
<index column="SORT_ORDER"/>
<one-to-many class="Section"/>
</list>
</class>
注記セクション
<class name="Section" table="NOTE_SECTIONS">
<id name="SectionID" column="Section_ID">
<generator class="identity" />
</id>
<property name="NoteID" column="NOTE_ID"/>
...
</class>
マッピングは、データの読み取りに完全に機能します。ただし、に変更を加えると、Note Section
生成されるクエリは適切な手順を実行しているように見えますが、次のエラーが発生します。
NHibernate.Exceptions.GenericADOException: コレクションを削除できませんでした: [Domain.Note.Sections#1][SQL: UPDATE NOTE_SECTIONS SET NOTE_ID = null, SORT_ORDER = null WHERE NOTE_ID = @p0] ---> System.Data.SqlClient.SqlException : 列 'NOTE_ID'、テーブル 'NOTE_SECTIONS' に値 NULL を挿入することはできません。列はヌルを許可しません。更新は失敗します。
このように保存するには、双方向である必要があることを読みました。しかし、双方向マッピングはリストでは機能しないことも読みました。コレクションの順序を維持することが重要です。保存する最善の方法は何ですか?