首页 > 解决方案 > 用新的迁移 asp.net 核心覆盖数据库

问题描述

我为我的 asp.net 核心 Web API 创建了一个新的迁移,它将更改应用到我的数据库,但后来我手动删除了迁移。我现在尝试添加具有新更改的新迁移,但由于我删除的迁移中的更改已应用于数据库,因此出现以下错误。

An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: There is already an object named 'FK_TaskDates_Tasks_TaskId' in the database. Could not create constraint or index. See previous errors

长话短说,我正在尝试将数据库状态恢复到应用已删除迁移之前的状态。

有没有办法让我将数据库恢复到它的工作状态?

标签: asp.net-core-webapientity-framework-migrations

解决方案


迁移通过将新迁移与上一次运行进行比较来工作。如果没有先前的迁移,它将脚本化数据库中的所有内容。

通常,对于没有先前迁移的现有数据库,您将需要添加基线迁移。使用 EF6,您可以为此基线使用 -IgnoreChanges 标志。EF Core 没有这个(除非最近添加),因此您可以通过在Up()方法中注释掉数据库中已有的内容并应用它来解决它。重要的是捕获模型的副本以供将来比较。

现在,您添加的下一个迁移将仅包括存储在代码文件中的该模型的更改。

要使您当前的系统正常工作,只需注释掉Up()方法中已经存在的内容并保留更改的内容并应用它(update-database)。


推荐阅读