Entity Framework 实体生成器不覆盖默认值

Entity Framework Entity Builder not overwriting default value

编辑 2020 年 5 月 18 日:这没有解决,但我解决了它。

我使用 Entity Framework Fluent Api 创建域 类。其中一个属性具有映射 HasDefaultValue(true).

当我尝试将数据插入数据库并将此 属性 设置为 false 时,某些东西覆盖了它并仍然在数据库中插入 true

实体生成器

public void Configure(EntityTypeBuilder<Shifts> builder)
{
   builder.ToTable("Shifts");

   builder.HasKey(s => s.ID);

   builder.Property(s => s.Available)
     .HasDefaultValue(true);   
}

控制器

Shifts newShift = new Shifts()
{
   Name = shiftOne,
   Available = false,
   // other fields               
};

现在当我这样保存时:

_unitOfWork.Shifts.Add(newShift);
await _unitOfWork.Commit();

当点击 unitOfWork.Shifts.Add(newShift); 行时,调试器显示我的 newShift 对象有一个字段 Available 设置为 false

提交后,突然变为 true,当我查看数据库时,我看到该字段设置为 true。代码运行无误。

如何防止这种情况发生并输入正确的值?

编辑解决方案:我已删除 .HasDefaultValue。显然,现在它可以工作了,但我仍然不知道是什么导致了这种行为。

我可以看到两种解决问题的方法:

  1. 让你的 "Available" 属性 做 nullable bool - 它应该做 或
  2. 删除那个

    .HasDefaultValue(真)

并向您的班次添加构造函数

public Shifts(){
   Available=true;
}