asp.net-core-webapi - 用新的迁移 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
长话短说,我正在尝试将数据库状态恢复到应用已删除迁移之前的状态。
有没有办法让我将数据库恢复到它的工作状态?
解决方案
迁移通过将新迁移与上一次运行进行比较来工作。如果没有先前的迁移,它将脚本化数据库中的所有内容。
通常,对于没有先前迁移的现有数据库,您将需要添加基线迁移。使用 EF6,您可以为此基线使用 -IgnoreChanges 标志。EF Core 没有这个(除非最近添加),因此您可以通过在Up()
方法中注释掉数据库中已有的内容并应用它来解决它。重要的是捕获模型的副本以供将来比较。
现在,您添加的下一个迁移将仅包括存储在代码文件中的该模型的更改。
要使您当前的系统正常工作,只需注释掉Up()
方法中已经存在的内容并保留更改的内容并应用它(update-database
)。
推荐阅读
- python - 如何在 django 中多次注释相同的值?
- random - 显示“列表项(随机)”的橙色块在哪里?我搞不清楚了
- c# - 将单个xml节点作为数组转换为json
- java - 模式匹配特定目录中可能嵌套在该目录中的文件
- amazon-web-services - 使用 Elasticsearch Service 对 AWS 上的搜索应用程序使用 Lambda 和“禁止”API 响应进行故障排除“错误处理程序”错误
- html - 需要在渲染后修改动态内容而不破坏绑定
- javascript - 如何在反应钩子axios中获取发布请求的ID?
- ios - 以动态方式顺序运行多个 Observable 实例 | RxSwift
- google-chrome - 在chrome webm文件中录制的文件没有播放,来自同一网站的firefox录制是可以的
- python - 无法导入'
'。检查' ' 是正确的