我不知道如何为C#数据模型制作自定义setter。场景非常简单,我希望我的密码能够使用SHA256功能自动加密。 SHA256功能非常有效(我以前在很多项目中使用过)。
我尝试过几件事但是当我运行update-database
时,似乎它正在递归地执行某些操作并且我的Visual Studio挂起(不发送错误)。请帮助我了解如何在模型中默认加密密码。
public class Administrator
{
public int ID { get; set; }
[Required]
public string Username { get; set; }
[Required]
public string Password
{
get
{
return this.Password;
}
set
{
// All this code is crashing Visual Studio
// value = Infrastructure.Encryption.SHA256(value);
// Password = Infrastructure.Encryption.SHA256(value);
// this.Password = Infrastructure.Encryption.SHA256(value);
}
}
}
种子
context.Administrators.AddOrUpdate(x => x.Username, new Administrator { Username = "admin", Password = "123" });
答案 0 :(得分:31)
您需要使用私有成员变量作为后备字段。这允许您单独存储值并在设置器中对其进行操作。
良好的信息here
public class Administrator
{
public int ID { get; set; }
[Required]
public string Username { get; set; }
private string _password;
[Required]
public string Password
{
get
{
return this._password;
}
set
{
_password = Infrastructure.Encryption.SHA256(value);
}
}
}
答案 1 :(得分:2)
您使用的get和set实际上创建了名为get_Password()
和set_Password(password)
的方法。
您希望将实际密码存储在私有变量中。因此,只需拥有一个由这些“方法”返回和更新的私有变量即可。
public class Administrator
{
public int ID { get; set; }
[Required]
public string Username { get; set; }
[Required]
private string password;
public string Password
{
get
{
return this.password;
}
set
{
this.password = Infrastructure.Encryption.SHA256(value);
}
}
}