实体是否会将默认值填充到db中?

时间:2018-06-21 00:13:35

标签: c# sql-server entity-framework-core asp.net-core-2.0

我的模型中有一个可为空的字段。我将其更改为必填且不可为空。新记录设置正确,但是是否有现有记录的字段需要更新?

在上下文文件中,我具有以下内容:

builder.Entity<Player>()
    .Property(p => p.Notifications)
    .HasDefaultValue(NotificationPreference.Both);

编辑:

因此,如果我在本地主机上手动进行ef迁移,则所有字段都将正确更新。有什么方法可以从天蓝色门户网站执行此操作吗?我的印象是,这将自动完成。但这似乎并不像它。

1 个答案:

答案 0 :(得分:1)

如果必须更新值才能使其他代码正常工作,则可以一次性在SQL Server上直接执行。

如果您编写的代码可以自动运行并在每次命中时进行设置,则冒着从现在起几个月后就忘记该代码的风险,并且最终可能会产生您不想要的结果(效率也很低)

处理此 的更好方法是,如果EF设置为null,则??合并运算符在属性的获取中设置默认值,以使该属性保持读取状态-write,但具有后备字段。这种方法使其他人可以清楚知道默认值是什么。

具有带有后备字段的属性的类的示例:

public class Person
{
  private int? age;

  public int? Age
  {
    get
    {
       return this.age ?? -1; // if (Age == 0) would be true otherwise as default(int) would be used
    }

    set
    {
       this.age = value;
    }
  }
}