Entity FrameWork EntityBuilder不会覆盖默认值

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

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

[当我尝试将数据插入数据库并将此属性设置为false时,某些内容将覆盖它,并且仍将true插入数据库中。

EntityBuilder

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,
   // other fields               
};

if(isPartTime == true)
{
   shifts.Available = false;
}

现在将其保存为:

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

调试器显示我的newShift对象的字段Available设置为false,这是正确的。提交后,状态突然变为true,当我查看数据库时,我看到该字段设置为true

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

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

您正在设置完全不同的变量的属性。您正在创建newShift

Shifts newShift = new Shifts() { ... }

但是您正在设置shifts.Available的值:

if(isPartTime == true)
{
   shifts.Available = false;
}

那时也应该是newShift,即:

if(isPartTime == true)
{
   newShift.Available = false;
}

另外可以进一步简化为:

newShift.Available = !isPartTime;
© www.soinside.com 2019 - 2024. All rights reserved.