我对Entity Framework很新,所以我不知道如何解决我的问题。我有一个User
实体,如下所示:
public int ID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string Checksum
{
get
{
return Checksum;
}
set
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] originalBytes = ASCIIEncoding.Default.GetBytes(this.Email);
byte[] encodedBytes = md5.ComputeHash(originalBytes);
Checksum = BitConverter.ToString(encodedBytes);
}
}
字段Checksum
不会有用户输入;我希望他能够通过某种逻辑来决定(在他的二传手中出现的那种逻辑)。当我需要更新一些用户敏感数据时,我会用它进行安全检查。
我走在正确的道路上?什么是正确的方法?
提前致谢!
答案 0 :(得分:1)
在其身体的任何地方不使用value
的setter是滥用技术的指标。如果字段是只读的,则只为其提供一个getter。如果您打算丢弃正在设置的值,请不要提供setter。相反,决定计算出的值所依赖的值,并将Checksum
的设置逻辑移动到其设置器中。
以你的类为例,这里唯一的依赖是Email
属性。您可以按如下方式更改课程:
public int ID { get; set; }
public string Name { get; set; }
private string email;
public string Email {
get { return email; }
set { email = value; UpdateChecksum(); }
}
public string Username { get; set; }
public string Password { get; set; }
private string checksum;
public string Checksum {
get { return checksum; }
}
private void UpdateChecksum() {
MD5 md5 = new MD5CryptoServiceProvider();
byte[] originalBytes = ASCIIEncoding.Default.GetBytes(email);
byte[] encodedBytes = md5.ComputeHash(originalBytes);
checksum = BitConverter.ToString(encodedBytes);
}
请注意UpdateChecksum
如何移入单独的方法。这在您有多个依赖项的情况下很有用:不是将逻辑嵌入到单个setter中,最好将其移动到方法中,并根据需要调用它。