EF迁移无法删除迁移。

4

编辑:我删除了数据库。它仍然告诉我迁移已应用。我不相信你的话,EF...

我有5个迁移,但第5个是意外创建的。它没有任何更改(UpDown方法为空)。我没有考虑就将其应用到了数据库中。

现在当我运行dotnet ef database update migration4时,它告诉我成功回滚了迁移#5,并且__EFMigrationsHistory表中没有迁移#5的条目。但是当我尝试使用dotnet ef migrations remove删除它时,它告诉我迁移#5仍然应用于数据库中,并且__EFMigrationsHistory中的条目会重新出现。

当我使用dotnet ef database update migration3回滚到迁移#3时,它确实删除了迁移#4的更改,并从__EFMigrationsHistory表中删除了条目。

现在,当我尝试删除时,它只是重新应用所有迁移。回滚到初始迁移也是一样。

有什么建议吗?我不知道从哪里开始。我需要重新做整个数据库和/或迁移吗?我尝试覆盖迁移#5,但dotnet ef migrations add不接受参数-f--force


1
你可以逐个从最后开始移除迁移。所以你首先移除5,然后是4,再然后是3。 - Vivek Nuna
dotnet ef database update migration3 不会删除 Migration3 的更改,而是会从 Migration4 中删除。 - Vivek Nuna
1
你尝试过使用程序包管理器控制台吗?我使用命令 Update-database -TargetMigration:"Migrationx" -force,它可以成功地工作。 - Peter Smith
@PeterSmith 我正在尝试强制执行 migrations add 命令来覆盖迁移 #5,更新数据库没有问题。 - lenny
@PeterSmith 我已经更新了我的帖子,因为一开始我自己搞错了发生了什么 - 它可以很好地更新(和降级),但是当我尝试执行 dotnet ef migrations remove 时,它会再次应用所有旧的迁移,并告诉我无法删除迁移 #5 - 因为出于某种原因它被再次应用。 - lenny
显示剩余4条评论
1个回答

3
更好的方法是执行以下操作:

PM Remove-Migration

PM Drop-Database

或者在您的解决方案资源管理器中删除迁移文件夹并创建一个新的迁移。这将使您的五个迁移合并成一个迁移。

然后执行以下操作:

PM Add-Migration

PM Update-Database


1
我最终采用了这种方法——删除数据库,移除迁移(使用 -f 选项,因为它仍然认为迁移已应用于数据库——_此时数据库不存在_),并运行 database update 以使用新的和正确的迁移重新创建数据库。缺点是:我丢失了所有数据,如果这不是开发环境,我将不得不在 SQL 脚本中恢复或保存数据。这也是我不接受这个答案的原因。 - lenny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接