SQL CE データベースに支えられた WPF MVVM アプリケーションで Entity Framework と Code First アプローチを使用しています。別のプロパティ値の変更に応じて、そのプロパティ値の 1 つを単純に更新できるモデル クラスを設計しようとしています。基本的に、インスタンスが EF によって初期化された後に「自己追跡」する poco を定義する方法を探しています。答えが Code First を放棄することである場合、おそらくそれが唯一の実行可能なルートです (確信はありません)。基本的な例:
class ThingModel
{
public int Id { get; set; }
public bool OutsideDbNeedsUpdate { get; set; }
private string _foo;
public string Foo
{
get { return _foo; }
set
{
if (_foo != value)
{
_foo = value;
OutsideDbNeedsUpdate = true;
}
}
}
}
ただし、上記の問題は、DbContext が実行時にインスタンスを初期化し、フィールドを設定するときはいつでも、私のクラスが応答で依存フィールドを時期尚早に設定していることです。言い換えれば、EF がインスタンスのフィールドの初期化を完了した後にのみ、poco クラスがこの特別な変更追跡を実行できるようにする単純なパターンを探しています。
ここでのソリューションのようなことができることはわかっています が、私のビジネス ケースでは、この特別な変更追跡を EF 変更追跡から分離する必要があります。つまり、上記の HasChanges プロパティの状態に関係なく、SaveChanges の機能が必要です。これは、エンティティの HasChanges プロパティを定期的にチェックし、外部データベース (EF DbContext をサポートするデータベースと同じではない) の依存値を更新できるようにしたいためであり、その間に EF DB に多くの変更/保存が発生する可能性があるためです。外部DBにプッシュします。したがって、DB のレコードにフラグを保持し、外部 DB への定期的な更新が発生したときにフラグを false にリセットすることを望んでいた理由です。