我使用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>
可以請別人幫忙。