VS2010を使用するプロジェクトでは、Entity FrameworkModelFirstを使用しています。
.edmxウィンドウまたはプロパティpassword
ウィンドウでフィールドを暗号化するように設定する方法があるのではないかと思います。生成された.csファイルは、モデルを変更するたびにカバーされるため、変更したくありません。
VS2010を使用するプロジェクトでは、Entity FrameworkModelFirstを使用しています。
.edmxウィンドウまたはプロパティpassword
ウィンドウでフィールドを暗号化するように設定する方法があるのではないかと思います。生成された.csファイルは、モデルを変更するたびにカバーされるため、変更したくありません。
EFには暗号化のサポートが組み込まれておらず、データベース暗号化メカニズムもサポートされていません(データベース全体を暗号化するSQL Serverで透過的な暗号化を使用している場合を除く)。
回避策として、アプリケーションで一元化された暗号化と復号化を行うことができます。ここに高レベルのアイデアがあります:
string
ます-このプロパティはnvarchar
、ターゲットデータベースの列として表されますSaveChanges
のメソッドをオーバーライドします(ObjectContext
または継承されたクラスのイベントを処理します)。このメソッド/ハンドラーでは、または状態(useまたは)にあるエンティティのすべてのインスタンスを検索し、暗号化する必要があるプロパティから値を取得して暗号化し、暗号化された値をBase64形式でプロパティに保存します。すべてのインスタンスのプロパティを暗号化した後のオーバーライド呼び出しの場合。DbContext
SavingChanges
ObjectContext
Added
Modified
ObjectStateManager
DbChangeTracker
SaveChanges
base.SaveChanges
ObjectMaterialized
継承されたクラスでも処理ObjectContext
し(DbContextでは、インスタンスからインスタンスIObjectContextAdapter
を取得するために使用する必要があります)、プロパティから暗号化された値を取得し、Base64形式からバイト配列に変換し、復号化してプロパティに保存します。プロパティ値を変更すると状態が変更される可能性があるため、これにより他の問題が発生する可能性がありますが、修正することもできます。ObjectContext
DbContext
より簡単なオプションは、暗号化と復号化を処理する新しいプロパティを追加する部分クラスを作成することです。次に、テーブルオブジェクトのPasswordプロパティではなく、コードでこの新しいプロパティを参照します。
Partial Public Class ObjectName
Public Property PasswordValue As String
Get
Return Password.Decrypt()
End Get
Set(value As String)
Password = value.Encrypt()
End Set
End Property
End Class
この場合、それを行うために文字列オブジェクトに拡張メソッドを作成しました。次のリンクのコードを使用して、暗号化と復号化を行いました。