2010-07-06 51 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

相關問題