lbr*_*him 2 c# entity-framework ef-code-first
我有如下模型:
public class User
{
private string password;
public string Password
{
get { return Decrypt(password); }
set { password = Encrypt(value); }
}
}
Run Code Online (Sandbox Code Playgroud)
我想从用户代码中轻松使用插入和选择密码,并以明文形式查看并希望逻辑层处理加密和解密.
不过,在选择时,EF会set的value再这样从数据库得到加密的密码将被再次加密,对我来说,从客户端代码这是一个问题得到.我也无法区分Insert和Select设置条件.
我很可能这样做:
//Insert
user.Password = Encrypt("123"); //Encrypt or Hash does not matter
context.Users.Add(user);
//Select
var hashedpassword = context.Users.Find(1).Select(u => u.Password).Single();
var unhashed = Decrypt(hashedpassword);
Run Code Online (Sandbox Code Playgroud)
相反,我希望从客户端代码中看不出来:
//Insert
user.Password = "123"; //Inserts encrypted password in database
context.Users.Add(user);
//Select
var cleartextpassword = context.Users.Find(1).Select(u => u.Password).Single();
Run Code Online (Sandbox Code Playgroud)
希望我能够解释这个问题,有人可以指出我正确的方向.如果它是否可能.
更好的解决方案确实是使用哈希.
但是注入一些逻辑的一般模式:
public class User
{
// the mapped-to-column property
protected virtual string PasswordStored
{
get ;
set ;
}
[NotMapped]
public string Password
{
get { return Decrypt(PasswordStored); }
set { PasswordStored = Encrypt(value); }
}
}
Run Code Online (Sandbox Code Playgroud)
而不是[NotMapped]你也可以用流利的API,以保持EF直接存放.
| 归档时间: |
|
| 查看次数: |
9686 次 |
| 最近记录: |