我是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] ---&gt; System.Data.SqlClient.SqlException:无法将值NULL插入列'NOTE_ID',表'NOTE_SECTIONS';列不允许空值。更新失败。
我已读取,为了保存这样,它需要是双向的。但我也读到,bidrectional映射不适用于列表。重要的是我的收藏品有一个维护的订单 - 最好的保存方式是什么?
答案 0 :(得分:1)
如果您希望以这种方式保存子对象,则应在集合映射上使用inverse="true"
。
<list name="Sections" table="NOTE_SECTIONS" inverse="true" cascade="all" lazy="false">
<key column="NOTE_ID"/>
<index column="SORT_ORDER"/>
<one-to-many class="Section"/>
</list>
答案 1 :(得分:0)
可能您需要将Note部分中的Note作为多对一关系引用。