1

我对 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”中;列不允许空值。更新失败。

已经读过,为了像这样保存,它需要是双向的。但我也读过双向映射不适用于列表。保持我的收藏品有序很重要——最好的保存方式是什么?

4

2 回答 2

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>

NHibernate 中的逆属性

于 2012-04-09T11:45:30.913 回答
0

可能您需要将 Note Section 中的 Note 称为多对一关系。

于 2012-04-09T02:57:26.403 回答