2010-09-03 72 views
2

目前我試圖實現代碼來處理陳舊的狀態異常(即,另一個用戶已經改變了這一行等..)很好當im提交使用nhibernate交易。這個想法是,當沖洗時發生異常時,回滾事務,通過不同的方式「修復」實體,然後重新運行整個事務代碼。NHibernate,事務回滾和實體版本

我的問題是,當事務回滾,實體版本屬性仍然被遞增,成功地更新了數據庫的實體,即使在數據庫的事務已回滾(這實際上也是如此的交易失敗的實體)。這意味着第二次運行永遠不會成功,因爲版本與數據庫不同步。

我該如何解決這個問題?

回答

4

當拋出一個NHibernate異常時,你必須拋棄該會話,因爲狀態不再有效。

這意味着重新獲得實體。

+0

是的,似乎最好的practive是regetting的實體。然而,在這種情況下,這對我來說不是一種選擇(需要太多的我們沒有atm預算的重現)我有其他選擇嗎? – MatteS 2010-09-04 07:39:25

+0

也許session.Refresh或session.Merge。 – 2010-09-04 11:40:16