1

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

大まかに言って、IDEvent、EventDate、TableName、RowID、FieldName、OldValue、NewValueのような構造のテーブルに変更を加えます。

複数の変更がある場合は、複数の行が挿入されます。

私の場合の90%ですでに機能しています。私は、ObjectContextのSavingChangesイベントをリッスンしています。

私の唯一の問題:追加の場合、SQL(IDENTITY)によって生成された主キーは、DBにまだ保存されていないため、現時点では(ロジック)SavingChangesイベントに存在しません。問題は次のとおりです。本当に必要なこと(テーブルにRowIDを入力するため)

それで、あなたはこれをどのように行うかについての考えを持っていますか?「ChangesSaved」イベントが見つかりませんでした。回避策のアイデア?

4

1 に答える 1

2

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();
  }

}

また、TransactionScopeを新しいSaveChangesに追加する必要があります。

于 2010-09-15T11:34:22.330 に答える