2010-05-20 63 views
0

我有一個使用JSON存儲在數據庫中的Dictionary<string, string>屬性的模型。我正在使用自定義的NHibernate類型將字典映射到JSON編碼的字符串中,並且可以正常工作。NHibernate更改跟蹤不會獲取對自定義類型的更改(IUserType)

我的問題是,當我刷新會話時,只有屬性發生了改變,就是這個字典,那麼實體不會更新。如果任何其他屬性也發生了變化,則實體(包括JSON字符串)會更新。

換句話說,NHibernate使用我的自定義類型正確地將字典映射到JSON,但是這個自定義屬性並不用於確定實體是否已經改變。

對此提出建議?

+0

您是否在DeepCopy方法中做了任何有趣的事情? (我*認爲*這是用於更改跟蹤,但不確定)。你能發佈你的UserType和主對象的映射嗎? – AlexCuse 2010-05-20 16:48:21

+0

不,沒有什麼有趣的DeepCopy,但感謝您的答覆。原來,這是我的Equals()實現和一些應用程序邏輯的結合。 – 2010-05-21 14:24:18

回答

4

您需要在IUserType實現中正確覆蓋Equals,以便在與初始值進行比較時返回false。 NHibernate使用Equals來確定該字段是否有需要保持的更改。

當另一個屬性發生變化時,更新它的原因是,默認情況下,NHIbernate發佈包括所有映射屬性的更新。

+0

謝謝,我的Equals()實現是問題......如果兩個對象引用指向同一個對象,並且在我的應用程序代碼中,我只是修改字典而不是創建一個新對象,則返回true。我認爲最簡單的解決方法是更改​​我的應用程序以在更新模型時創建新的字典對象。 – 2010-05-21 14:22:27