C# NHibernate:从多对多关系中删除子项会导致异常
我已经为这个问题争论了几天了 我有两个多对多关系的类,配置如下:C# NHibernate:从多对多关系中删除子项会导致异常,c#,nhibernate,hibernate,C#,Nhibernate,Hibernate,我已经为这个问题争论了几天了 我有两个多对多关系的类,配置如下: <class name="Entry" table="Entries"> <id name="Id" column="Id"> <generator class="native" /> </id> <timestamp name="LastUpdated" column="Entry_LastUpdated" generated="alway
<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>
这是我对该对象执行的唯一操作。但是,当会话刷新时,会引发以下StaleObjectStateException异常:
行被另一个事务更新或删除(或未保存的值映射不正确):
[项目.业务逻辑.条目#22]
我一直在玩弄逆
和级联
值,并在谷歌上搜索答案,但找不到任何解决方案。无论是inverse=“true”
还是cascade=“all/all delete orphan”
都没有奏效。这是一个与多对多关系有关的问题,还是我看错了方向?
我的类是否映射错误 编辑
这可能是由于NHibernate使用和DateTime结构的方式导致的问题吗?您不需要将关联的一端标记为“反向=真”,另一端标记为“反向=假”吗?
通过这样做,您定义了协会的“所有者”。显然,我的假设是正确的。问题是由
引起的
我设计和映射它的方式似乎存在一些问题,或者可能是NHibernate本身的问题。时间戳映射为:
<timestamp name="LastUpdated" column="Entry_LastUpdated" generated="always" />
数据库(MSSQL 2005 server)中的字段类型为datetime
,对象上有一个匹配的System.datetime
属性。这不起作用
我尝试了一些其他配置,但也无法使其工作。最后,我删除了
,并将使用代码管理修改日期,同时在需要时添加数字版本字段
如果有人能在NHibernate中提供任何带有时间戳的版本管理信息,我们将不胜感激。您能在每个映射中包含您的部分吗?你在用吗?@ShaneC:我已经添加了这个部分。我使用的是时间戳映射,而不是版本。我认为在这种特殊情况下,这没有任何区别。如果我没有弄错的话,主要是为了帮助NHibernate决定如何创建协会。我的问题似乎与此无关。
<timestamp name="LastUpdated" column="Entry_LastUpdated" generated="always" />