我使用NHibernate作爲我的ORM。我有一種情況,我在ITransaction中包裝了一些東西。我正在監聽NHibernate中的SaveUpdate事件,然後在SaveUpdate處理程序中進行實體驗證。NHibernate - 驗證和交易的問題
對於我的一個實體,我想驗證某個屬性的值沒有改變。所以我想,我會加載數據庫中現有對象的值,並將其與新值進行比較。問題是我調用了ITransaction.Commit()來保存我的實體對象,並且事務在驗證發生時並未實際提交,所以我無法從數據庫加載現有對象,因爲事務已將其鎖定。
所以我想我在這裏有幾個不同的問題: - SaveUpdate事件是否是驗證的正確位置? - 有沒有另外一種方法可以做到這一點,以便我可以做我需要做的驗證(從數據庫中獲取現有值並進行比較)?
我確定有人在那裏遇到類似的情況......希望!
我不同意。我最終希望在保存之前驗證我的實體,所以我認爲它確實與持久性有關。對屬性進行驗證適用於簡單情況,但有時驗證規則不僅僅涉及單個實體(例如,銀行帳戶只能擁有一個主要帳戶持有者)。 – 2009-08-18 13:02:07
這不是不使用方法來更改實體中的事物的原因。聚合根應該負責驗證它的子實體。 – Paco 2009-08-18 13:55:27
但是當我保存一個聚合根的子實體時呢? – 2009-08-18 14:08:22