我正在使用EF Code First項目,一切都很順利。我有一個簡單的類,客戶。在我的客戶類別中,我有一個要加密的字段(是的,我知道我可以在數據庫級別進行加密,但要求指定我在域/代碼級別進行加密),所以我希望我可以執行以下操作:實體框架代碼首先,非空setter或getter?
public class Customer
{
public int CustomerID { get; set; }
public string FieldToEncrypt { get; set { _FieldToEncrypt = MyEncryptionFunction.Encrypt(); } }
}
但是,我認爲如果setter有一個定義,實體框架代碼在生成模式時可能會首先忽略該屬性。所以我的問題是,有沒有辦法使用提供的getters/setter來執行EF Code First,還是應該將此功能移到構造函數中?我應該重寫上下文保存時發生的某個方法/事件嗎?
編輯* ** * ** * ** * ** * ** * ****
作爲一個說明,我使用DataService通過OData協議服務傳輸數據。這會自動生成插入/更新/選擇方法。一些建議需要創建第二個屬性,但DataService類似乎不通過NotMapped屬性。這在我之前的問題中引起了一些爭議。
如果您正在對字符串進行加密,我建議儘可能地將它放在輸入附近。即你在哪裏做'FieldToEncrypt =「asdf」;'(在setter中處理加密),改爲'FieldToEncrypt = MyEncryptionFunction.Encrypt(「asdf」);' –
你試過了嗎? SO上有許多類似的答案,表明這可以按照您尋找的方式開箱即用。請參閱http://stackoverflow.com/questions/11962532/what-does-entityframework-code-first-do-with-property-getters-setters和http://stackoverflow.com/questions/8990319/have-a-custom -set-on-property-for-ef-code-first-model-entity – Zeph
你提供的第二個鏈接似乎更接近我所需要的。但是,他正在談論的是「未映射」該領域。我希望該字段仍然映射。我只是希望在數值停留在數據庫之前對映射值進行轉換。 我想我有一個更深的問題,那就是:在EF Code First中,代碼在插入之前/之後調用getter和setter? – Richthofen