实体框架实体生成器未覆盖默认值

问题描述 投票:0回答:1

编辑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();

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

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

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

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

c# entity-framework ef-fluent-api
1个回答
0
投票

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

  1. 将您的“可用”属性设为可空布尔-应该这样做或
  2. 删除那个

    。HasDefaultValue(true)

并将一个构造函数添加到您的班次中

public Shifts(){
   Available=true;
}
© www.soinside.com 2019 - 2024. All rights reserved.