【问题标题】:Entity Framework FirstOrDefault overrides with constructor values?实体框架 FirstOrDefault 用构造函数值覆盖?
【发布时间】:2019-10-24 00:13:26
【问题描述】:

我有一个带有构造方法的用户模型 - User()。当我使用 EF 从数据库中检索用户时,EF 从构造函数返回值,而不是从数据库中返回值。我的用户类:

public class User
{
    public string Email { get; set;}
    public string PasswordSalt { get; set;}

    public User()
    {
        PasswordSalt = "some random value"
    }
 }

检索用户:

var user = _context.User.FirstOrDefault(o => o.Email == "a@b.com");

因此,user.PasswordHash 将返回“一些随机值”,而不是实际存储在数据库中的哈希。

【问题讨论】:

  • 在创建模型时使用默认值怎么样。 docs.microsoft.com/en-us/ef/core/modeling/relational/…
  • 这里的密码盐值意味着每个用户都会收到一个唯一生成的随机值。如果我正确理解默认值的概念,那似乎会呈现一个静态值。
  • 无法重现 - 我可以在构造函数中设置默认值,但如果在数据库中找到一行,则将返回这些值 - 而不是构造函数的默认值。这里一定有更多的事情发生......
  • @marc_s 你是对的,我的代码有问题。该类有一个 setter 函数,该函数在为属性分配值时生成一个新的哈希(此方法未在上面的代码中显示)。即使值来自数据库,EF 似乎也应用了 setter 函数。

标签: c# entity-framework linq .net-core


【解决方案1】:

我们必须如下改变构造函数

 public class User
{
public string Email { get; set;}
public string PasswordSalt { get; set;}

public User()
{
    PasswordSalt = string.IsNullOrEmpty(PasswordSalt)? "some random value":PasswordSalt;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多