【问题标题】:How to add a record to __EFMigrationsHistory without actually running the migration in EF Core如何在不实际在 EF Core 中运行迁移的情况下将记录添加到 __EFMigrationsHistory
【发布时间】:2019-11-19 22:40:43
【问题描述】:

我有一个问题,我有一个现有的数据库,我只映射了某些实体以与 EF Core 一起使用(数据库有 100 个表,我不想要所有这些表的类。

我是这样搭建起步阶段的

dotnet ef dbcontext scaffold .. etc etc

我用连接字符串指定了特定的表。

然后,我创建了一个初始迁移以使用

对起始阶段进行快照
dotnet ef migrations add Initial

我现在想添加一个基于新实体的新表。所以我使用

创建了第二次迁移
dotnet ef migrations add NewTable

但是当我使用..运行它时。

dotnet ef database update NewTable

它尝试在初始迁移中添加表!因为我还没有进行迁移,所以我在 __EFMigrationsHistory 中没有记录。但我不想运行第一次迁移,因为我已经有了脚手架的表! Initial 只是创建一个快照,这是我认为你必须做的。

那么有没有办法让它认为 Initial 已经运行?把东西放进去 __EFMigrationsHistory?然后我可以运行 NewTable 迁移而不会得到“对象已存在”。

谢谢

【问题讨论】:

  • 您不能手动将挂起的迁移名称插入__EFMigrationsHistory 吗?
  • 我做了,但我遇到了同样的问题。当我删除初始迁移代码文件时,它终于起作用了。即使我没有运行它,它仍在尝试生成表。向 __EFMigrationsHistory 添加记录没有任何区别。在我删除它之前,它仍然尝试运行第一次迁移。

标签: .net-core entity-framework-core


【解决方案1】:

在我删除前一个后,它运行我最新的 NewTable 迁移正常,否则它仍在尝试从初始迁移中添加对象,导致“对象已存在”。

我觉得这句话很奇怪 'dotnet ef 数据库更新 NewTable' 指定我想要运行的迁移,并且不应该再次运行初始。无论如何,这个修复工作正常。

【讨论】:

  • dotnet ef database update NewTable 运行所有需要的迁移,以使数据库进入到给定迁移历史描述的状态。它还可以通过删除迁移来降级您的数据库。如果您有 5 次迁移,则您的数据库处于“迁移 4”并且您运行“...更新 3”,迁移编号 4 将被还原。在 __EFMigrationsHistory 表中跟踪应用迁移的状态。你可以手动插入/删除行,让 dotnet-ef 做你想做的事。
猜你喜欢
  • 2022-11-04
  • 2015-11-06
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2021-10-22
  • 2012-06-07
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多