2016-05-25 12 views
2

私は、データベースからのデータの読み込み/編集/削除の監査手段を開発することを任されました。私はEFでこれを行う方法について検索しました。 CodeProjectのブログ記事、Implementing Audit Trail using Entity Framework Part-1が見つかりました。しかし、記事は2009年に書かれました。私はそれがうまくいくと確信していますが、私はEF 6以上を使用している場合、これを行うより良い方法があるのだろうかと思います。 EF 6+には、ログ/監査に必要なデータを取得する新しい方法がありますか? EF 6+を使用した監査の「ベストプラクティス」アプローチがありますか?EF 6以降では、データとのやりとりを監査する優れた方法がありますか?

+2

なぜデータベースのトリガーを使用しないのですか?追加のメリットとして、EFなしでデータベース上で実行されるすべてのアクションを直接ログに記録します。 – Evk

+0

データベース・トリガーの使用を依頼しました。しないようにと言われた。そういうわけで私は代わりの解決策を模索しなければならないのです。 – Rod

+1

彼らはまた、 "いいえ"に加えていくつかの議論を提供したいと思います。 – Evk

答えて

0

EF6またはEFコアの場合でも、自分自身を実装するかサードパーティ製のライブラリを使用するだけで、監査を達成できます。

免責事項:私はEntity Framework Plus

プロジェクトの所有者だ。このライブラリサポートEF5、EF6およびEFコアと複数のMUST-HAVEがデータベースに自動保存のような機能があります。

// using Z.EntityFramework.Plus; // Don't forget to include this. 

var ctx = new EntityContext(); 
// ... ctx changes ... 

var audit = new Audit(); 
audit.CreatedBy = "ZZZ Projects"; // Optional 
ctx.SaveChanges(audit); 

// Access to all auditing information 
var entries = audit.Entries; 
foreach(var entry in entries) 
{ 
    foreach(var property in entry.Properties) 
    { 
    } 
} 

ドキュメント:EF+ Audit

+0

ジョナサン、私はあなたがこのような質問に答えることは素晴らしいことだと思います。また、あなたは常にあなたの個人的な関心事(免責事項)を適切に言及します。しかし、私はあなたの前にあなたが答えたようなものの重複としてこれらのような質問をマークする方が良いと思います。ライブラリの新しい情報が役立つと思うときはいつでも、更新することができる*標準的な回答*として回答の1つを選択できます。重複は、この答えの道標として役立ちます。 –

+1

フィードバックに感謝します。私は個人的には "Duplicate"を嫌っています。なぜなら、彼らは現在のユーザー/質問にパーソナライズされていないからです。しかし、私はそれらを他の回答と重複してマークしようとします。私はあなたが言及したように、コードのカスタマイズを必要としない限り、やろうとします。 –

+0

ありがとう!はい、質問は、それ自身の答えに値するほど十分に異なるかどうかは、常に良いバランスです。たぶんこれがあったかもしれません - あなたの最初の文はOPが実際に尋ねたものに答えます。とにかく、質問が本当に重複してしまう前に、他に4つの投票が必要です。あなたの意見だけではありません。 –

0

さて、あなたの必要性が何であるかに基づいて、いくつかのオプションがあります。私は、監査がパフォーマンスのためにデータベースレベルで行われ、エンティティフレームワークのコンテキスト外で行われた変更を監査するのが最善であると思います。 SQL Serverのバージョンとエディションによって、あなたは、アプリケーションレベルのデータを含める必要がある場合は、インターセプタを使用と組み合わせて、それを含めることができるかもしれないhttps://msdn.microsoft.com/en-us/library/cc280386.aspx

のようなビルドの機能を使用することができるかもしれません(https://msdn.microsoft.com/en-us/data/dn469464.aspx#BuildingBlocks.Resultを参照してください)

もう1つの選択肢は、SaveChangesのオーバーライドで監査ロジックを作成することです(https://msdn.microsoft.com/en-us/library/cc716714(v=vs.100).aspx参照)。これは保存にのみ影響し、読み込みには影響しません。

関連する問題