2010-07-06 49 views
2

我一直在争夺这个问题进行了两天。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]

我一直玩弄inversecascade值和谷歌搜索的答案,但找不到任何解决方案。 inverse="true"cascade="all/all-delete-orphan"都没有效果。
这是一个与多对多关系有关的问题,还是我看错了方向?
我的类映射不正确吗?

编辑

难道这是从NHibernate的工作原理与方式和日期时间结构产生的问题?

+1

您能否在每个映射中包含您的部分?你是否使用? – 2010-07-06 14:43:07

+0

@ShaneC:我已添加部分。我正在使用时间戳映射而不是版本。 – GeReV 2010-07-07 07:50:34

回答

0

显然,我的假设是正确的。该问题是由<timestamp/>造成的。

似乎有一些问题,我设计和映射它,或者可能是一个NHibernate本身的问题。
时间戳被映射为:

<timestamp name="LastUpdated" column="Entry_LastUpdated" generated="always" /> 

在数据库中的字段类型(MSSQL 2005服务器)是datetime,与所述对象上的匹配System.DateTime属性。 这没有奏效。

我试过一些其他的配置,as described here by Ayende Rahien,但无法让它工作。
最后,我删除了<timestamp/>,并导致使用代码来管理修改日期,同时在需要的地方添加数字版本字段。

如果任何人都可以提供有关NHibernate中的时间戳版本管理的任何信息,将不胜感激。

1

不要你必须标记该协会为“逆=真正的”,另一个是“逆=假”的一端? 通过这样做,您可以定义关联的“所有者”。

+0

我认为这在这个特殊情况下没有任何区别。如果我没有弄错,主要是帮助NHibernate决定如何创建关联。我的问题似乎与此无关。 – GeReV 2010-07-07 12:31:39

相关问题