的改变的属性我使用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