未使用NHibernate保存一对多列表

未使用NHibernate保存一对多列表,nhibernate,Nhibernate,我是NHibernate的新手,在保存子对象列表时遇到了一个问题 注意 <class name="Note" table="NOTE"> <id name="NoteID" column="NOTE_ID"> <generator class="identity" /> </id> ... <list name="Sections" tab

我是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>

...
这些映射非常适合读取数据。但是,当我对
注释部分进行更改时,它生成的查询似乎经过了正确的步骤,但随后出现以下错误:

NHibernate.Exceptions.GenericADOException:无法删除集合:[Domain.Note.Sections#1][SQL:更新注释(Sections)设置注释(ID=null,排序)顺序=null,其中注释(ID=@p0]->System.Data.SqlClient.SqlException:无法将值null插入到“Note(ID)列、表“Note(Sections”中;列不允许空值。更新失败


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

可能您需要引用注释部分中的注释作为多对一关系。

可能您需要引用注释部分中的注释作为多对一关系。

您应该使用
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>


如果希望以这种方式保存子对象,则应在集合映射上使用
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更明显一点。reverse=“true”对于初学者来说并不是最直观的命令。正是这样。因此,不需要双向关系。有时候我希望NHibernate更明显一点。reverse=“true”对于初学者来说并不是最直观的命令。