这是 EF Core 3.1。我有几个带有布尔字段 的模型,IsActive定义如下:
public class Job
{
public bool? IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的种子数据如下所示:
modelBuilder.Entity<Job>()
.Property(e => e.IsActive)
.HasDefaultValue(true);
modelBuilder.Entity<Job>().HasData(
new Job() { IsActive = true });
Run Code Online (Sandbox Code Playgroud)
每次我创建迁移(包括如果我运行未进行任何更改的迁移,这应该生成一个空迁移),它都会调用UpdateData上面的字段,如下所示:
migrationBuilder.UpdateData(
table: "Jobs",
keyColumn: "id",
keyValue: 1L,
column: "IsActive",
value: true);
Run Code Online (Sandbox Code Playgroud)
我还在TodoApi 应用程序中复制了此行为,并为任何对更多详细信息感兴趣的人设置了 GitHub 存储库。
我知道当种子数据由函数生成时会发生这种情况,或者类似的结果DateTime.Now。我不明白当在播种期间为该列分配原始布尔值时会发生这种情况。
此行为似乎与问题 #13047非常相似,“将 BoolToStringConverter 与 HasData 一起使用时生成不正确的 UpdateData 操作”,但该问题已在 EF Core 2.2 中修复。