エンティティフレームワーク:私のオブジェクトに保存されている変更を監視します

StackOverflow https://stackoverflow.com/questions/3715319

質問

私のプロジェクトでは、エンティティフレームワークを介して、オブジェクトに行われたすべての変更を記録する必要があります。これは、どのフィールドがどのテーブルで編集されているかを登録するためだけに構成されています。

大まかに、この種の構造のあるテーブルに変更を入れます: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を追加する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top