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

凯尔·亚当斯(Kyle Adams)

这是EF Core 3.1。我有几个具有布尔字段的模型IsActive,定义如下:

public class Job
{
    public bool? IsActive { get; set; }
}

我的种子数据如下所示:

modelBuilder.Entity<Job>()
    .Property(e => e.IsActive)
    .HasDefaultValue(true);

modelBuilder.Entity<Job>().HasData(
    new Job() { IsActive = true });

每次我创建迁移时(包括如果我进行的迁移都没有进行任何更改,这都会生成一个空迁移),它就会UpdateData调用上面的字段,如下所示:

migrationBuilder.UpdateData(
    table: "Jobs",
    keyColumn: "id",
    keyValue: 1L,
    column: "IsActive",
    value: true);

我还在TodoApi应用程序中复制了此行为,为对更多详细信息感兴趣的任何人设置了GitHub存储库

我了解这种情况是在某个函数生成种子数据或诸如此类的结果时发生的DateTime.Now我不明白这里发生的情况,在播种期间为该列分配了原始布尔值。

此行为似乎与问题#13047非常相似,“将BoolToStringConverter与HasData一起使用时生成了不正确的UpdateData操作”,但该问题已在EF Core 2.2中修复

阿提亚尔

好吧,原因是HasDefaultValue(true)在以下模型配置代码中调用了-

modelBuilder.Entity<Job>()
    .Property(e => e.IsActive)
    .HasDefaultValue(true);

每当使用该HasDefaultValue()方法为属性设置默认值时即为数据库表中相应列设置的值。

使用HasDefaultValue(true),您已设置trueIsActive属性的默认值因此,在种子数据中-

modelBuilder.Entity<Job>().HasData(
    new Job() { IsActive = true });

IsActive从迁移的角度来看,即使迁移之间的数据没有变化,将值设置为(无关紧要的值)也不会改变。

编辑-解决方案:
为列设置默认值的要求始终是有效要求。因此,您可能要考虑更改的另一件事是数据播种方法。

您现在使用的播种方法完全由迁移本身管理,并且存在一些限制-模型种子数据的局限性

您可以使用自定义初始化逻辑来为与迁移无关的数据设定种子。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

django模型在每次迁移时都会收到“更改字段”警报

来自分类Dev

为什么即使没有对Docker映像中的大文件进行任何更改,它们也每次都会被推送?

来自分类Dev

添加带有种子数据的迁移时,EF Core 返回 Stackoverflow

来自分类Dev

为什么即使没有进行任何更改,按Enter键时,更改事件仍会在v文本字段中激活?

来自分类Dev

尽管终端显示 Rails 的“已完成 200”,但为什么数据库没有更新任何内容?

来自分类Dev

为什么对数据库进行更改时我的绑定没有更新?

来自分类Dev

每次运行makemigrations时,Django模型的enum字段都会创建新的迁移,即使未更改

来自分类Dev

创建迁移时EF Core工具错误

来自分类Dev

为什么没有EF Core OfType(Type type)方法?

来自分类Dev

尽管有冲突的更新,但EF没有抛出DbUpdateConcurrencyException

来自分类Dev

为什么更改 itemsource 后我的 listView 没有更新?

来自分类Dev

为什么字符串没有更新并且最后没有打印任何内容

来自分类Dev

每次我更改Django项目中的产品字段时,都会更新日期

来自分类Dev

为什么我的本地数据库(SQL Server)没有种子任何数据

来自分类Dev

EF迁移没有任何待处理的更改,但它仍然抱怨有待处理的更改。EF如何跟踪这一情况?

来自分类Dev

尽管收到有效的操作负载(异步身份验证调用),为什么我的 Redux 状态没有更新

来自分类Dev

EF Core - 添加迁移时添加的 ID1 属性

来自分类Dev

为什么“如果”在此布尔方法中没有做任何事情?

来自分类Dev

当变量在vue之外更改时,Vue为什么没有看到布尔变量更改?

来自分类Dev

为什么fwupd即使显示许多可用的更新也没有安装任何固件更新?

来自分类Dev

即使没有返回任何字段,为什么我也会出现“私人访问”错误?

来自分类Dev

为什么 EF Core 没有设置自定义注释?

来自分类Dev

为什么没有简单的方法在EF Core中定义多对多关系?

来自分类Dev

为什么.NET Core 5中的Program.cs中没有任何类?

来自分类Dev

为什么我没有得到任何加速度计更新?

来自分类Dev

核心数据更新不保存且没有任何错误,为什么?

来自分类Dev

为什么 mapStateToProps 没有显示任何更新(TypeScript、ReactJS、Redux)

来自分类Dev

为什么我的 JS 按钮在单击时没有更新任何内容?

来自分类Dev

为什么我的模型没有在 .Net Core 中使用带有 JSON 的帖子进行绑定?

Related 相关文章

  1. 1

    django模型在每次迁移时都会收到“更改字段”警报

  2. 2

    为什么即使没有对Docker映像中的大文件进行任何更改,它们也每次都会被推送?

  3. 3

    添加带有种子数据的迁移时,EF Core 返回 Stackoverflow

  4. 4

    为什么即使没有进行任何更改,按Enter键时,更改事件仍会在v文本字段中激活?

  5. 5

    尽管终端显示 Rails 的“已完成 200”,但为什么数据库没有更新任何内容?

  6. 6

    为什么对数据库进行更改时我的绑定没有更新?

  7. 7

    每次运行makemigrations时,Django模型的enum字段都会创建新的迁移,即使未更改

  8. 8

    创建迁移时EF Core工具错误

  9. 9

    为什么没有EF Core OfType(Type type)方法?

  10. 10

    尽管有冲突的更新,但EF没有抛出DbUpdateConcurrencyException

  11. 11

    为什么更改 itemsource 后我的 listView 没有更新?

  12. 12

    为什么字符串没有更新并且最后没有打印任何内容

  13. 13

    每次我更改Django项目中的产品字段时,都会更新日期

  14. 14

    为什么我的本地数据库(SQL Server)没有种子任何数据

  15. 15

    EF迁移没有任何待处理的更改,但它仍然抱怨有待处理的更改。EF如何跟踪这一情况?

  16. 16

    尽管收到有效的操作负载(异步身份验证调用),为什么我的 Redux 状态没有更新

  17. 17

    EF Core - 添加迁移时添加的 ID1 属性

  18. 18

    为什么“如果”在此布尔方法中没有做任何事情?

  19. 19

    当变量在vue之外更改时,Vue为什么没有看到布尔变量更改?

  20. 20

    为什么fwupd即使显示许多可用的更新也没有安装任何固件更新?

  21. 21

    即使没有返回任何字段,为什么我也会出现“私人访问”错误?

  22. 22

    为什么 EF Core 没有设置自定义注释?

  23. 23

    为什么没有简单的方法在EF Core中定义多对多关系?

  24. 24

    为什么.NET Core 5中的Program.cs中没有任何类?

  25. 25

    为什么我没有得到任何加速度计更新?

  26. 26

    核心数据更新不保存且没有任何错误,为什么?

  27. 27

    为什么 mapStateToProps 没有显示任何更新(TypeScript、ReactJS、Redux)

  28. 28

    为什么我的 JS 按钮在单击时没有更新任何内容?

  29. 29

    为什么我的模型没有在 .Net Core 中使用带有 JSON 的帖子进行绑定?

热门标签

归档