我对 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:更新 NOTE_SECTIONS SET NOTE_ID = null,SORT_ORDER = null WHERE NOTE_ID = @p0] ---> System.Data.SqlClient.SqlException :无法将值 NULL 插入到列“NOTE_ID”、表“NOTE_SECTIONS”中;列不允许空值。更新失败。
我已经读过,为了像这样保存,它需要是双向的。但我也读过双向映射不适用于列表。保持我的收藏品有序很重要——最好的保存方式是什么?