2010-04-14 26 views
0

的改變的屬性我使用asp.net 3.5查找類

我有一個包含10個物業的許可類,而不是標記爲可序列。我必須將屬性更改記錄到數據庫中。許可證是一個實體類,它不在我的範圍內修改它。所以我不能將它標記爲serializabel,我也不能使用IpropertyChanged接口。

現在我不能將它存儲在視圖狀態,因爲它不可序列化。我想存儲它,以便我可以將它與新值進行比較,並查看哪些值已更改。

如何繼續此操作。

+0

您正在使用LINQ2SQL嗎?如果是這樣,它有一些方法來解決這個問題。 – leppie 2010-04-14 10:25:08

+0

不,我們不使用LINQ2SQL.We使用企業庫並在DAL中填充實體。 – Rohit 2010-04-14 10:27:20

回答

2

您可以通過編寫一個類來查看目標對象,並使用反射將所有已公開屬性的值存儲在名稱/值字典中。然後,在「比較」時間,您再次使用反射並與存儲在字典中的值進行比較?

只是猜測...

0

如果您有原始對象(即在它被改變之前)。那麼最好使用反射來循環顯示的屬性並進行比較。

你的代碼最終可能會看起來像這樣(這不是一個完整的示例):

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); 
} 

然後你可以存儲,或做任何你想用不同的列。

0

作爲給定答案的替代方案,您可以看看面向方面編程(例如PostSharp:http://www.sharpcrafters.com/)。

通過這種方式,您可以在每次設置屬性時調用的類外創建一個方法。在diff之後,可以將任何更改插入到數據庫中