2016-09-30 4 views
1

私はef-coreコードで構築されたプロジェクトの監査メカニズムを最初に持っています。私は "OnModelCreating"関数のいくつかのテーブルのカスケードするために "DeleteBehavior"プロパティを設定しました。エンティティを削除すると、もう1つはカスケード削除動作によって自動的に削除されます。それは今のところ良いことだし、削除されたエンティティをすべて取得する必要がありますが、できません。 ChangeTrackerには削除されたカスケードエンティティは含まれていません。どのようにカスケード削除された値を取得できますか?これを行う方法はありますか?削除されたカスケード値のEFコア監査

+0

コードを表示できますか? – Sampath

+0

さて、データベースからエンティティを取得することはできますが、それはカスケードされた削除の目的を完全に破ります。結論は次のとおりです。クライアントアプリケーションは、データベース内で何が起きているかを監査することはできません。 [データベースのみ](https://msdn.microsoft.com/en-us/library/bb933875.aspx)。 –

答えて

1

カスケード削除はデータベース側で行われます。 Entity Frameworkは、どのエンティティが削除されるかを意識する必要はありません。

Entity Frameworkは、変更を追跡してベースオブジェクトのみを削除します。

編集:あなたは正しいですsubquestions

回答。私はEF +のオーナーです。

技術的には、ライブラリがこれを処理できますが、これは重大なパフォーマンス上の欠点を伴います。私は、監査のカスケード削除シナリオを処理する機能やライブラリを認識していません。

提案ですか?

あり、いくつかの提案があるが、私はあなたがそれらのいずれかを好きではありませんかなり確信している、と私はどちらかのパフォーマンス上の理由のためにそれらをお勧めしません:

  • はあなたを強制する(カスケード削除を使用しないでください

  • 作成ON DELETEデータベース側でトリガーとログを作成します。

このシナリオでは、良い解決策はありません。

+0

私はあなたがEFのクリエイターであると仮定します+そうですか?だから、あなたのライブラリーでこの状況を処理する方法がありますか?そうでない場合は、何をお勧めしますか? – kizilsu

+1

あなたの答えをありがとう、それは非常に有用です:) – kizilsu

関連する問題