1

SecurEntityを使用して、アプリケーションの一部のテーブルに列暗号化を実装しようとしています。

依存関係の挿入を使用して、DbContext の単一のインスタンスをすべてのリポジトリに挿入しています。

DbContext クラスには、SaveChanges イベント ハンドラーに関連付けられたイベントがあり、保存されている変更が暗号化されるべきオブジェクトにある場合、SecurEntity Encrpyt メソッドを呼び出します。

暗号化されたオブジェクトが最初にデータベースから取得されるときに暗号化を解除する ObjectMaterialized イベント ハンドラーに関連付けられたイベントもあります。

ログイン中にアプリケーションをデバッグすると、User オブジェクト (暗号化する必要があるテーブルの 1 つ) である User オブジェクトがデータベースから取得され、正常に復号化されます。次に、更新された最終ログイン日などのいくつかのプロパティがあり、これらの変更が保存され、正常に暗号化されます。

私の問題は、ログイン プロセスの後半で User オブジェクトが再度取得されますが、ObjectMaterialized イベントが発生しないため、復号化されないことです。

これは、依存性注入のために単一の DbContext が使用されており、Entity Framework には追跡されているそのインスタンスが既にあるためだと思います。

これを回避する方法を知っている人はいますか? Azure でホストされるアプリケーションを開発しているため、Transparent Data Encryption はオプションではなく、何らかの形式の暗号化を実装する必要があります。

4

1 に答える 1

0

Web アプリケーションは、DbContext のインスタンスをぶらぶらさせたままにしないでください。DbContext は、リクエスト中に生きて死ぬ必要があります (リクエストが完了するとすぐに Disposed を取得します)。依存性注入がどのように構成されているかを確認してください。どのような状況でも、DbContext をシングルトン (アプリケーション全体の単一インスタンス) として使用するように構成しないでください。

于 2013-09-19T14:15:42.587 に答える