2017-08-09 48 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框架)也可以訂閱該事件。