2017-08-09 5 views
0

エンティティフレームワークがオブジェクトの変更を追跡する方法(How change tracking works in Entity Framework)と同様の、非常に簡単で重要なオプションのオブジェクト追跡システムを実装しようとしています。オブジェクトのプロパティ変更を暗黙的に検出する

私は他のすべてのオブジェクトが継承する基本クラスを持っています。このクラスには、modifiedという1つのブール値フィールドがあります。これに対する明白な解決策は、セッターがトリガーされたときにmodified = trueに設定するために、他のクラスのすべてのプロパティですべてのセッターを更新することです。この解決策は、ここに詳細に提示されている。Create an event to watch for a change of variable

私はこれにもっと暗黙の解決策が必要です。私は多くのオブジェクトとたくさんのプロパティを持っています。セッターを更新するのは非常に面倒です。エンティティ・フレームワークが現在の要件には高価すぎるため、エンティティ・フレームワークがどのように機能するかを直接的に模倣したくはありません。 modified == trueをチェックするためにループできるオブジェクトのリストが必要です。これにより、オプションでオブジェクトを追跡し、個々のオブジェクトごとに更新をトリガーすることなく変更があったかどうかを素早く確認することができます。プロパティゲッターとセッターのすべてに対して何らかのリスナーを暗黙的に設定できる方法はありますか?

私はこのコードが存在しないことを知っていますが、.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; 
    } 
} 

私が言及したように、私はすべてのセッターを更新したり、エンティティフレームワークが何をコピーしたくないのですか?

+1

[オブジェクトが変更されているかどうかを確認する方法]の複製がありますか?(https://stackoverflow.com/questions/7952616/how-to-check-if-an-object-has-changed) – Adam

+1

@Adamタイトルだけに基づいて重複していることを示唆する前に、質問を読んでください。 –

+1

@DanHastings、またはおそらく正しい答えをあなたの問題に近づけるかどうかを決定するための質問だけでなく、*答えを読んでください。重複は問題が同じでないことを意味します - それは同じ回答になることもあります – Jamiec

答えて

3

これは.NETフレームワークには何も組み込まれていませんが、これを行うサードパーティのツールがあります。

このようなオプションの1つはFody/PropertyChangedで、これはクラスのすべての自動プロパティセッターにOnPropertyChangedコールを注入します。 PropertyChangedイベントに登録して、ブール値フラグを更新することができます。追加のボーナスとして、(a)変更されたプロパティの名前を取得し、(b)他のクラス(UIフレームワークなど)もイベントに登録できます。

関連する問題