2010-09-13 46 views
0

我想知道在NHibernate中是否有任何功能來檢查是否對對象進行了更改,意味着它已被加載,需要寫入數據庫來保存。NHibernate檢查更改爲提示保存

我還有其他一些片段,比如當前選定的元素等等,可能會改變,但是如果他們這樣做,它在實際數據方面沒有什麼區別。

如果在WPF/C#中檢查是否有需要保存的更改,那麼我可以在退出前提示用戶。

感謝

回答

0

簡短的回答:你需要實現your own "IsDirty" methods


NHibernate的設計工作 而不給 實體類的任何要求。它會在 會話中進行內部跟蹤 會話是否被 會話跟蹤。雖然它會是 很好,如果它暴露了一些方法 ISession檢查實體是否爲 髒,這並沒有解決變化 作出實體,而他們是 從會話中分離。

_

你的類可以實現ICloneable 和IEquatable,那麼你可以做一個 克隆你的對象,你讓 用戶之前進行更改,然後 該克隆後比作當前對象 看他們是不是 更長一樣。

如果您 類中的藏品也實現了ICloneable和 IEquatable,這種方法也可以讓 你知道,如果事情發生了轉變 某處層次。

0

您可以查詢Session.IsDirty,如果有任何對象發生變化,它將返回true。

更復雜的方法涉及獲取SessionImplementor,Persister,PersistenceContext和當前值,然後在那裏使用FindDirty。

我不推薦它,但如果需要,我可以給你代碼。最好在ViewModel級別跟蹤它。