C# 检查两个对象的属性是否有更改

C# 检查两个对象的属性是否有更改,c#,reflection,.net-3.5,C#,Reflection,.net 3.5,我必须开发一种机制来检查两个对象属性的更改。 所有需要检查的属性都用属性标记 自动取款机i -通过linq从acutal对象读取所有属性 -从旧对象读取相应的属性 -用两个属性(旧值和新值)填充自己的对象 在代码中,对workerclass的调用如下所示 public void CreateHistoryMap(BaseEntity actual, BaseEntity old) { CreateHistoryMap(actualEntity, oldEntity

我必须开发一种机制来检查两个对象属性的更改。
所有需要检查的属性都用属性标记

自动取款机i
-通过linq从acutal对象读取所有属性
-从旧对象读取相应的属性
-用两个属性(旧值和新值)填充自己的对象

在代码中,对workerclass的调用如下所示

    public void CreateHistoryMap(BaseEntity actual, BaseEntity old)
    {
        CreateHistoryMap(actualEntity, oldEntity)
                       .ForEach(mapEntry => CreateHistoryEntry(mapEntry),
                                mapEntry => IfChangesDetected(mapEntry));
    }
CreateHistoryMap构建包含两个属性的HistoryMapEntry。
CreateHistoryEntry构建保存到数据库的对象,如果检测到更改,请检查对象是否有更改

我必须处理自己的特殊应用程序类型,以便为数据库生成历史值(如包含列表值等)

我现在的问题是,我必须读取属性值两次
-用于更改检测
-对于concreate CreateHistoryEntry

我如何才能消除这个问题,或者如何使用nice c#3.5特性实现变更跟踪场景


非常感谢。

您可以采用CSLA.NET框架所采用的方法,它的特点是可撤销对象(以及数据绑定的属性更改跟踪)。它是一个非常干净的实现,并且被放置在业务对象的基类中,以获得您简单获得的好处

链接:


所讨论的类是BusinessBase和UndoableBase-您也可以只删除更改跟踪代码而保留其余部分-尽管CSLA.NET设计得很好,但业务对象中嵌入了很多逻辑。

感谢框架的提示,看起来非常有趣。但我不能用它。我必须自己开发更改跟踪/历史工作:/I您仍然可以将此逻辑放入类本身。类可以通过序列化来克隆自身的副本,然后您可以定义接口、基类或帮助器方法来获取类的两个实例并比较其属性。问题还在于,您关心的是内部对象状态还是公共状态?问题是,在我们的应用程序中,几乎所有实体字段和流程都可以由用户配置(在应用程序中具有管理员权限)。我不允许使用这个框架。(我想在家里试试,因为它看起来很有趣)