私はEF Code Firstプロジェクトで作業していますが、すべてうまくいきます。私は簡単なクラス、顧客を持っています。私の顧客クラスでは、暗号化したいフィールドがあります(はい、私はDBレベルで暗号化できますが、ドメイン/コードレベルで暗号化する必要があります)ので、私は次のようなことができると期待しています:エンティティフレームワークコードまず、空でないセッターまたはゲッターですか?
public class Customer
{
public int CustomerID { get; set; }
public string FieldToEncrypt { get; set { _FieldToEncrypt = MyEncryptionFunction.Encrypt(); } }
}
しかし、私は、セッターは、定義を持つ場合、スキーマを生成する際に、エンティティ・フレームワークコードは最初にそのプロパティを無視することができると仮定する。だから私の質問は、提供されたgetters/setterでEF Code Firstを行う方法があるのか、あるいはこの機能をコンストラクタに移すべきかということです。コンテキストが保存されているときに発生するメソッド/イベントの1つをオーバーライドする必要がありますか?
EDIT * ** * ** * ** * ** ** * ****注意点としては
、私が使用しています* DataServiceを使用して、ODataプロトコルサービスを介してデータを送信します。これにより、挿入/更新/選択メソッドが自動的に生成されます。いくつかの提案では、2番目のプロパティを作成する必要がありますが、DataServiceクラスはNotMappedプロパティを通過していないようです。これは、私の以前の質問に少しぶつかる。
文字列で暗号化を行っている場合は、できるだけ入力の近くに配置することをおすすめします。すなわち、 'FieldToEncrypt =" asdf ";'(setterで暗号化が処理された)の場合、 'FieldToEncrypt = MyEncryptionFunction.Encrypt(" asdf ");' –
に変更しましたか?あなたが探している方法でこれが箱の中で働いていることを示唆しているので、同様の多くの答えがあります。 http://stackoverflow.com/questions/11962532/what-does-entityframework-code-first-do-with-property-getters-settersおよびhttp://stackoverflow.com/questions/8990319/have-a-customerを参照してください。 -setter-on-property-for-ef-code-first-model-entity – Zeph
あなたが提供した2番目のリンクは、私が必要とするものに近いと思われます。しかし、彼はフィールドをマッピングしないことを話しています。私はフィールドをまだマッピングしておきたい。値がデータベースに詰まる前にマップされた値を変換しておきたいだけです。 私はもっと深い疑問を持っていると思います。それは、EF Code Firstでは、挿入前/挿入後にゲッターとセッターを呼び出しますか? – Richthofen