2009-05-20 29 views
0

我使用NHibernate和ASP.Net使用每個請求一個會話由比利·麥卡弗蒂(對不起,我不能包括最佳實踐文章建議鏈接)。我曾與版本樂觀鎖成功使用此,節省了HTTP Session對象更新的對象,並重新連接到使用SaveOrUpdate方法NHibernate會話。NHibernate的StaleObjectStateException

不過,我最近的頁面需要子對象的集合的更新。我使用了NHibernate手冊(第17章)的父子例子中提出的方法。這在加載並保存在單個請求中時有效。然而,在一個請求加載時,保存在HTTP會話,並使用SaveOrUpdate在隨後請求重新連接,我沖洗NHibernate會話時收到StaleObjectException異常。即使沒有對子對象集合進行更改,也會發生這種情況。

被父對象的屬性所做的更改保存到數據庫中,所以它會出現的NHibernate試圖兩次更新的對象。我懷疑這是與映射中的級聯選項有關的,但爲了使父/子關係正常工作,這些是必需的。

這裏是我的映射文件:

父類映射

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="NHS.WebTeam.PharmacyFirst.Medication, PharmacyFirst" table="Medication" lazy="false" optimistic-lock="version" where="Deleted=0"> 
    <id name="ID" column="Medication_ID" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 

    <version column="version" name="Version"/> 
    <property name="Deleted" column="Deleted" /> 

    <property name="Name" column="Name" /> 

    <bag name="Prices" access="field.camelcase-underscore" lazy="false" inverse="true" cascade="all"> 
     <key column="Medication_ID"/> 
     <one-to-many class="NHS.WebTeam.PharmacyFirst.MedicationPrice, PharmacyFirst" /> 
    </bag> 

    </class> 
</hibernate-mapping> 

兒童類映射

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="NHS.WebTeam.PharmacyFirst.MedicationPrice, PharmacyFirst" table="Medication_Price" lazy="false" optimistic-lock="version" where="Deleted=0"> 
    <id name="ID" column="Medication_ID" unsaved-value="0"> 
     <generator class="identity" /> 
    </id> 

    <many-to-one name="Medication" column="medication_id" not-null="true" cascade="none"/> 
    <property name="DateFrom" column="Date_From" /> 
    <property name="Price" column="Price" /> 

    </class> 
</hibernate-mapping> 

可以請別人幫忙。

回答

0

對於大家有沒有發現,看來這個問題已被固定在NHibernate的2.1,所以你只要更新。

相關問題