2017-08-09 100 views
0

我想实现一个非常简单的,更重要的类似实体框架轨道如何对象更改(How change tracking works in Entity Framework)可选的对象跟踪系统的性能变化。隐式检测对象

我有一个基类的所有其他对象继承。这个类有一个叫做modified的布尔字段。明确的解决方案是在setter被触发时更新其他类的所有属性的每个setter以设置modified = true。这种解决方案已在这里详细介绍了Create an event to watch for a change of variable

我想这是一个比较含蓄的解决方案。我有很多对象和很多属性。更新二传手是非常麻烦的。我不想直接模仿实体框架如何执行任务,因为它对我当前的需求来说太昂贵了。我想要一个对象列表,我可以循环检查modified == true。这使我可以选择跟踪对象,并快速检查它们是否发生更改,而不必为每个单独的对象触发更新。有没有一种方法可以隐式地为所有属性getter和setter设置某种监听器?

我知道这个代码犯规存在,但.NET有办法监视的对象,看它是否已经改变。

[OnChange=ObjectChanged()] //maybe this way 
public class MyClass 
{ 
    bool modified {get; set;} 
    public MyClass() : OnChange(ObjectChanged) //or this way 
    { 

    } 

    private void ObjectChanged() 
    { 
     modified = true; 
    } 
} 

正如我所提到的,我不想更新每个setter或复制什么实体框架。

+1

可能重复[如何检查对象是否已更改?](https://stackoverflow.com/questions/7952616/how-to-check-if-an-object-has-changed) – Adam

+1

@亚姆请在建议它是基于标题的重复之前阅读该问题。 –

+1

@DanHastings,或者阅读*答案*不仅仅是问题,以确定它是否足够接近您的问题,以指向正确的方向。重复并不意味着问题是相同的 - 它也可以是相同的答案 – Jamiec

回答

3

没有什么内置在此了.NET Framework的,但也有第三方工具来做到这一点。

其中一个选项是Fody/PropertyChanged,它将OnPropertyChanged调用注入到您的类的所有自动属性设置器中。您可以订阅PropertyChanged事件并更新您的布尔标志。作为额外的好处,(a)你得到改变的财产的名称和(b)其他类(例如你的UI框架)也可以订阅该事件。