检查两个对象的属性是否有变化

时间:2010-06-16 08:06:06

标签: c# reflection .net-3.5

我必须开发一种机制来检查两个对象属性的变化 检查所需的所有属性都标有属性。

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

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

    public void CreateHistoryMap(BaseEntity actual, BaseEntity old)
    {
        CreateHistoryMap(actualEntity, oldEntity)
                       .ForEach(mapEntry => CreateHistoryEntry(mapEntry),
                                mapEntry => IfChangesDetected(mapEntry));
    }

CreateHistoryMap 构建包含两个属性的HistoryMapEntry。
CreateHistoryEntry 构建保存到数据库的对象, IfChangesDetected 检查对象是否有更改。

我必须处理自己的特殊应用程序类型以生成数据库的历史值(比如汇总列表值等)。

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

如何消除此问题或如何使用优秀的c#3.5功能实现更改跟踪方案?

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

链接: http://www.lhotka.net/cslanet/

有问题的类是BusinessBase和UndoableBase - 您也可以只删除更改跟踪代码并完成剩下的工作 - 虽然CSLA.NET设计得很好,但业务对象中嵌入了很多逻辑。