小编Kyl*_*ams的帖子

尽管没有进行任何更改,为什么 EF Core 在每次迁移时都会更新种子布尔字段?

这是 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 中修复

entity-framework-core .net-core entity-framework-core-3.1

5
推荐指数
1
解决办法
1214
查看次数