1

我对实体框架很陌生,所以我不知道如何解决我的问题。我有一个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将没有用户输入;我希望他由某种逻辑决定(他的二传手在场的那个)。当我需要更新一些用户的敏感数据时,我会用它来进行安全检查。

我在正确的道路上?这样做的正确方法是什么?

提前致谢!

4

1 回答 1

1

没有value在其身体任何部位使用的二传手是滥用该技术的指标。如果一个字段是只读的,则只为其提供一个 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 中,不如将其移动到一个方法中,并根据需要调用它。

于 2013-05-13T15:10:52.033 回答