私は監査追跡に関するいくつかの投稿や記事を読むのに時間を費やしましたが、それでもこれを理解することはできません。
私が必要としているのは、次のような結果をもたらす非常に基本的な監査システムです。
- 顧客「JohnDoe」は「User」によって削除されました
- 顧客「JaneDoe」は「他のユーザー」によって作成されました
- 「JohnDoe」からのアドレスが「User」によって変更されました
- 顧客「JaneDoe」は「他のユーザー」によって削除されました
dbContextでSaveChangesイベントをオーバーライドしようとしましたが、次の問題でスタックしました。
public override int SaveChanges()
{
foreach (DbEntityEntry<IAuditable> entry in ChangeTracker.Entries<IAuditable>())
{
if (entry.State == EntityState.Added)
{
// since the object was not added yet, if I write to log in here and
// for some reason SaveChanges fail, I will end up with a fake log entry
}
else if (entry.State == EntityState.Modified)
{
// same in here
}
}
return base.SaveChanges();
// here the state for all entries have changed to Unchanged or Detached.
// detached is probably the one that was deleted however the “Unchanged”
// could be new or modified records.
}
データベースでトリガーを使用してこれを実現できることはわかっていますが、SQL担当者ではなく、アプリケーションをデプロイした後はそれほど制御できないため、ここに保持して、より詳細に制御できるようにします。データベース上。
私はここで非常に単純な何かが欠けていると確信しています。助けていただければ幸いです。
前もって感謝します。