我一直在争夺这个问题进行了两天。NHibernate的:从许多一对多的关系,删除子项将导致异常
我有一个多到许多关系的几个类,配置如下所示:
<class name="Entry" table="Entries">
<id name="Id" column="Id">
<generator class="native" />
</id>
<timestamp name="LastUpdated" column="Entry_LastUpdated" generated="always" />
...
<bag name="Sections" generic="true" table="EntrySections" inverse="false" cascade="none">
<key column="EntrySection_EntryId" />
<many-to-many column="EntrySection_SectionId" class="Blogs.BusinessLogic.Section, Blogs.BusinessLogic"/>
</bag>
</class>
<class name="Section" table="Sections">
<id name="Id" column="Id" unsaved-value="0">
<generator class="native" />
</id>
<timestamp .../>
...
<bag name="Entries" generic="true" table="EntrySections" inverse="false" cascade="none">
<key column="EntrySection_SectionId" />
<many-to-many column="EntrySection_EntryId" class="Blogs.BusinessLogic.Entry, Blogs.BusinessLogic"/>
</bag>
</class>
它在,我可以删除,也就是说,一个Section
对象及其关联的方式配置任何条目将被删除。
然而,当我想只删除的关联,例如:
entry.Sections.Remove(section);
这是我此对象上执行的唯一操作。但是,当会话刷新,以下StaleObjectStateException抛出异常:
行被另一事务更新或删除(或者未保存值的映射是不正确的): [Project.BusinessLogic.Entry#22]
我一直玩弄inverse
和cascade
值和谷歌搜索的答案,但找不到任何解决方案。 inverse="true"
和cascade="all/all-delete-orphan"
都没有效果。
这是一个与多对多关系有关的问题,还是我看错了方向?
我的类映射不正确吗?
编辑
难道这是从NHibernate的工作原理与方式和日期时间结构产生的问题?
您能否在每个映射中包含您的部分?你是否使用? –
2010-07-06 14:43:07
@ShaneC:我已添加部分。我正在使用时间戳映射而不是版本。 –
GeReV
2010-07-07 07:50:34