2010-04-14 23 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之后,可以将任何更改插入到数据库中