我正在使用EF Code First项目,一切都很顺利。我有一个简单的类,客户。在我的客户类中,我有一个我想要加密的字段(是的,我知道我可以在数据库级别进行加密,但要求我在域/代码级别加密),所以我希望我可以执行以下操作:
public class Customer
{
public int CustomerID { get; set; }
public string FieldToEncrypt { get; set { _FieldToEncrypt = MyEncryptionFunction.Encrypt(); } }
}
但是,我假设如果setter有一个定义,实体框架代码首先可能在生成模式时忽略该属性。所以我的问题是,有没有办法用提供的getter / setter来做EF Code First,还是应该将这个功能转移到构造函数中?我应该覆盖上下文保存时发生的一个方法/事件吗?
编辑 * ** * ** * ** * ** * ** * ****
作为一个注释,我使用DataService通过OData协议服务传输数据。这会自动生成插入/更新/选择方法。一些建议需要创建第二个属性,但DataService类似乎没有通过NotMapped属性。这引起我先前问题的一些纠结。
答案 0 :(得分:4)
public class Customer
{
public int CustomerID { get; set; }
public string EncryptedField { get; private set; }
[NotMapped]
public string Field
{
get { return MyEncryptionFunction.Decrypt(EncryptedField); }
set { EncryptedField = MyEncryptionFunction.Encrypt(value); }
}
}