エンティティフレームワーク:私のオブジェクトに保存されている変更を監視します
-
02-10-2019 - |
質問
私のプロジェクトでは、エンティティフレームワークを介して、オブジェクトに行われたすべての変更を記録する必要があります。これは、どのフィールドがどのテーブルで編集されているかを登録するためだけに構成されています。
大まかに、この種の構造のあるテーブルに変更を入れます:idevent、eventdate、tablename、rowid、fieldname、oldvalue、newValue
複数の変更がある場合、いくつかの行が挿入されます。
私のケースの90%ですでに機能しています、私はObjectContextのSavingChangesイベントを聞いています
私の唯一の問題:ADDの場合、SQL(ID)によって生成される私の主要なキーは、SavingChangesイベントに現時点では(ロジック)存在しません。これはDBにまだ保存されていないため、問題は私が本当に必要なこと(私のテーブルで私のrowidを満たすために)
それで、あなたはこれを行う方法を考えていますか? 「changessaved」イベントは見つかりませんでした。回避策のアイデア?
解決
SavingChangesイベントでこれを行うことはできません。 ObjectContext用の独自のラッパーを作成し、SaveChangesのラッパーメソッドに独自のロジックを実装できると思います。ロジックは次のようにする必要があります
public class MyContextWrapper : IDisposable
{
private ObjectContext _context;
public void SaveChanges()
{
// Detect changes but do not accept them
_context.SaveChanges(SaveOptions.DetectChangesBeforeSave); // SaveChanges(false) in .NET 3.5 SP1
// TODO audit trail
// Audit is completed so accept changes
_context.AcceptAllChanges();
}
}
また、新しいSaveChangesにTransactionScopeを追加する必要があります。
所属していません StackOverflow