未使用NHibernate保存一对多列表
我是NHibernate的新手,在保存子对象列表时遇到了一个问题 注意未使用NHibernate保存一对多列表,nhibernate,Nhibernate,我是NHibernate的新手,在保存子对象列表时遇到了一个问题 注意 <class name="Note" table="NOTE"> <id name="NoteID" column="NOTE_ID"> <generator class="identity" /> </id> ... <list name="Sections" tab
<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”对于初学者来说并不是最直观的命令。