的改變的屬性我使用asp.net 3.5查找類
我有一個包含10個物業的許可類,而不是標記爲可序列。我必須將屬性更改記錄到數據庫中。許可證是一個實體類,它不在我的範圍內修改它。所以我不能將它標記爲serializabel,我也不能使用IpropertyChanged接口。
現在我不能將它存儲在視圖狀態,因爲它不可序列化。我想存儲它,以便我可以將它與新值進行比較,並查看哪些值已更改。
如何繼續此操作。
的改變的屬性我使用asp.net 3.5查找類
我有一個包含10個物業的許可類,而不是標記爲可序列。我必須將屬性更改記錄到數據庫中。許可證是一個實體類,它不在我的範圍內修改它。所以我不能將它標記爲serializabel,我也不能使用IpropertyChanged接口。
現在我不能將它存儲在視圖狀態,因爲它不可序列化。我想存儲它,以便我可以將它與新值進行比較,並查看哪些值已更改。
如何繼續此操作。
您可以通過編寫一個類來查看目標對象,並使用反射將所有已公開屬性的值存儲在名稱/值字典中。然後,在「比較」時間,您再次使用反射並與存儲在字典中的值進行比較?
只是猜測...
如果您有原始對象(即在它被改變之前)。那麼最好使用反射來循環顯示的屬性並進行比較。
你的代碼最終可能會看起來像這樣(這不是一個完整的示例):
Type type = license.GetType();
PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
foreach(PropertyInfo property in properties)
{
//compare your properties with property.GetValue(newLicense, null) and property.GetValue(originalLicense, null);
}
然後你可以存儲,或做任何你想用不同的列。
作爲給定答案的替代方案,您可以看看面向方面編程(例如PostSharp:http://www.sharpcrafters.com/)。
通過這種方式,您可以在每次設置屬性時調用的類外創建一個方法。在diff之後,可以將任何更改插入到數據庫中
您正在使用LINQ2SQL嗎?如果是這樣,它有一些方法來解決這個問題。 – leppie 2010-04-14 10:25:08
不,我們不使用LINQ2SQL.We使用企業庫並在DAL中填充實體。 – Rohit 2010-04-14 10:27:20