私は、データベースからのデータの読み込み/編集/削除の監査手段を開発することを任されました。私はEFでこれを行う方法について検索しました。 CodeProjectのブログ記事、Implementing Audit Trail using Entity Framework Part-1が見つかりました。しかし、記事は2009年に書かれました。私はそれがうまくいくと確信していますが、私はEF 6以上を使用している場合、これを行うより良い方法があるのだろうかと思います。 EF 6+には、ログ/監査に必要なデータを取得する新しい方法がありますか? EF 6+を使用した監査の「ベストプラクティス」アプローチがありますか?EF 6以降では、データとのやりとりを監査する優れた方法がありますか?
答えて
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
ジョナサン、私はあなたがこのような質問に答えることは素晴らしいことだと思います。また、あなたは常にあなたの個人的な関心事(免責事項)を適切に言及します。しかし、私はあなたの前にあなたが答えたようなものの重複としてこれらのような質問をマークする方が良いと思います。ライブラリの新しい情報が役立つと思うときはいつでも、更新することができる*標準的な回答*として回答の1つを選択できます。重複は、この答えの道標として役立ちます。 –
フィードバックに感謝します。私は個人的には "Duplicate"を嫌っています。なぜなら、彼らは現在のユーザー/質問にパーソナライズされていないからです。しかし、私はそれらを他の回答と重複してマークしようとします。私はあなたが言及したように、コードのカスタマイズを必要としない限り、やろうとします。 –
ありがとう!はい、質問は、それ自身の答えに値するほど十分に異なるかどうかは、常に良いバランスです。たぶんこれがあったかもしれません - あなたの最初の文はOPが実際に尋ねたものに答えます。とにかく、質問が本当に重複してしまう前に、他に4つの投票が必要です。あなたの意見だけではありません。 –
さて、あなたの必要性が何であるかに基づいて、いくつかのオプションがあります。私は、監査がパフォーマンスのためにデータベースレベルで行われ、エンティティフレームワークのコンテキスト外で行われた変更を監査するのが最善であると思います。 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参照)。これは保存にのみ影響し、読み込みには影響しません。
- 1. 150カントリーレコーディング以上の優れた方法はありますか?
- 2. EFまたはSQLは、データの変更を監査するためのより良い選択ですか?
- 3. "監査セッションを作成する"と "監査をセッション別に作成する"の違いはありますか?
- 4. cでプロセス間でデータをやりとりする方法は?
- 5. EnversでHibernateの読み取りを監査する方法は?
- 6. AndroidアプリケーションでSugarCRMデータをやりとりする方法は?
- 7. アクティビティグループ内のアクティビティ間でデータをやりとりする方法はありますか?
- 8. whileループなしでコンピュータ間でデータをやりとりする方法はありますか? C++
- 9. EF 6(dnxプロジェクトあり)
- 10. grailsに標準的な監査追跡方法がありますか?
- 11. C++には問題があり、6つのファイルと、以前に定義された関数があります。
- 12. View Pagerでフラグメント間でデータをやりとりする方法
- 13. 監査証跡のサイズを確認し、監査証跡をフラッシュまたは切り捨てる方法は?
- 14. Java Playの監査ツールはありますか?フレームワーク
- 15. Spockでは、「then」ブロックから重複したやりとりを排除する方法はありますか?
- 16. .NET 4.0以降を対象としたRecaptcha.Webのバージョンはありますか?
- 17. ソーシャルメディアとやりとりするためのライブラリはありますか?
- 18. redirect()やrender()より優れた機能はありますか? [ノードアプリケーション]
- 19. エンティティの変更を挿入または更新して監査する方法はありますか?
- 20. スレッド内のソケットとの間でデータをやりとりする方法は?
- 21. ユースケース図に監査証跡とエラーログを含める必要があります
- 22. 削除されたファイルとやりとりする方法
- 23. pynessusとやりとりする方法
- 24. wcfとwpfの間でデータをやりとりする方法は?
- 25. JavaScriptにsetTimeoutより優れたものがありますか?
- 26. AndroidStudioでスレッドを監視する方法はありますか?
- 27. Vuejsでローカルストレージを監視する方法はありますか?
- 28. バージョン5.2以降でSonarQubeのスペルチェックのプラグインはありますか?
- 29. Djangoのフラットページより優れたものはありますか?
- 30. OSXのNavicatより優れたものはありますか?
なぜデータベースのトリガーを使用しないのですか?追加のメリットとして、EFなしでデータベース上で実行されるすべてのアクションを直接ログに記録します。 – Evk
データベース・トリガーの使用を依頼しました。しないようにと言われた。そういうわけで私は代わりの解決策を模索しなければならないのです。 – Rod
彼らはまた、 "いいえ"に加えていくつかの議論を提供したいと思います。 – Evk