我有一个下载的生产数据库,其中包含一个空的MigrationHistory表(内容被意外删除)。
我的开发环境中有一个更新的代码模型(以前没有迁移)。
换句话说,下载的生产数据库架构与开发环境代码模型之间存在不匹配 - 并且它们之间没有历史记录。
如何构建代码优先迁移(或获取SQL)以将生产数据库更新为新模型?
我根据建议here尝试了以下内容:
Enable-Migrations
)Add-Migration InitialCreate -IgnoreChanges
)Update-Database
)这会导致在MigrationHistory表中添加一行。
然而,EF似乎认为这意味着当前的代码模型与数据库模式匹配(当然,它没有)。
如果我尝试添加新的迁移(Add-Migration UpdatedModel
),则此迁移将为空,但由于代码模型和数据库不匹配,因此不应该这样做。
如何获得反映代码模型和数据库模式之间变化的代码优先迁移(或SQL)? (如果我在没有Add-Migration InitialCreate
标志的情况下尝试-IgnoreChanges
,我会从头开始创建整个数据库,正确反映代码模型,但我想要进行更改。)
答案 0 :(得分:0)
您所遵循的指南中的第一步清楚地表明您需要一个与数据库同步的模型。那就是它失败了。
您需要做的是:
Enable-Migrations
在此步骤中,您的数据库和模型将同步。还有一些步骤,你准备好了:
Add-Migration
Update-Database
Tchan!你懂了!顺便说一下,了解迁移命令的每个参数非常重要,为此,在您的程序包管理器控制台中,使用以下任何命令:
get-help Enable-Migrations -examples
get-help Enable-Migrations -detailed
get-help Enable-Migrations -full
简而言之:当您启用迁移时,Code First模型和数据库必须匹配。没有其他方法可以执行此操作。这就是为什么你必须对数据库进行反向工程以获得初始同步,并从此开始工作。