1

最初に EF5 データベースでログの変更/監査証跡を実行する良い方法を探しています。

私が抱えている主な問題は、現在古いアプリケーションが台無しになり、トリガーを使用してログを作成することですが、そのアプリケーションでは、データベース接続はアプリケーションの各ユーザーに対して特定のユーザーを使用します (アプリケーションのすべてのユーザーには独自のデータベースユーザーがあります) )、したがって、ログを作成するとき、ユーザー ID やホストなどのデフォルト値として多くの接続プロパティを使用します。また、ログに記録された多くのテーブルにはユーザー ID 行がないため、EF を使用する場合、更新/挿入したいエンティティ/delete にはユーザー データがありません。

しかし、私のアプリケーション(MVC4)には、1人のユーザー(それぞれに同じデータベースユーザー)のみを使用する1つの文字列接続しかないため、トリガーは接続文字列からデータベースユーザーのuserIdを保存します。

では、EF を使用してログを作成する良い方法は何でしょうか? トリガーを使用してそれを行う方法はありますか?(およびユーザーIDなどを渡しますか?)。

onUpdate関数のオーバーライドについて読んでいますが、EF5では機能しないと言っています

4

1 に答える 1

1

DatabaseContext では、SaveChanges 関数をオーバーライドできます。

ログに記録する必要があるエントリの変更セットをテストできます。低レベル、つまりデータレイヤーに近いかもしれませんが、EFで動作します。

次のようなものが得られます。

public override int SaveChanges()
{
    foreach (var entry in ChangeTracker.Entries())
    {
        if (entry.State == EntityState.Added)
        {
            var needToLogAdd = entry.Entity as INeedToLogAdd;
            if (needToLogAdd != null)
                    DoLogAdd(needToLogAdd);
        }
    }

    base.SaveChanges();
}
于 2013-10-30T10:48:38.110 に答える