【发布时间】:2013-02-04 20:36:27
【问题描述】:
我正在使用 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,或者我应该将此功能移动到构造函数中?我是否应该覆盖在保存 Context 时发生的方法/事件之一?
编辑************ ********
请注意,我使用 DataService 通过 OData 协议服务传输数据。这会自动生成插入/更新/选择方法。一些建议需要创建第二个属性,但 DataService 类似乎没有通过 NotMapped 属性。这让我之前的问题有点纠结。
【问题讨论】:
-
如果您要对字符串进行加密,我建议将其尽可能靠近输入。即在你做
FieldToEncrypt = "asdf";(在setter中处理加密)的地方,更改为FieldToEncrypt = MyEncryptionFunction.Encrypt("asdf"); -
你试过了吗? SO上有许多类似的答案表明这以您正在寻找的方式开箱即用。见stackoverflow.com/questions/11962532/… 和stackoverflow.com/questions/8990319/…
-
您提供的第二个链接似乎更接近我的需要。但是,他说的是“不映射”该领域。我仍然希望该字段被映射。我只想在值卡在数据库中之前转换映射的值。我想我有一个更深层次的问题,那就是:在EF Code First中,代码是否在插入之前/之后调用getter和setter?
标签: c# entity-framework ef-code-first