代码优先迁移问题

Code-First migrations issue

我有一个连接到数据库的项目,该项目是使用代码优先迁移创建的。 Migrations 文件夹中的所有迁移 cs 文件都被删除,但数据库中有 __MigrationHistory table。

现在我需要修改模型并将更改应用到数据库。 我能否以某种方式从历史 table 恢复迁移文件,以便 "add-migration" 命令生成正确的更新脚本?

一旦迁移应用到您关心的所有已部署数据库,重新建立新基线就没什么大不了的。您将无法回滚到先前的迁移,但如果需要,可以通过多种方式执行此操作。我经常汇总我的迁移或在未使用它们的现有数据库上开始迁移。

您可以通过以下方式恢复同步:

1) Remove the __MigrationHistory table from your database.
2) Remove your migration folder from the project.
3) enable-migrations
4) add-migration InitialSnapshot -IgnoreChanges  // tells EF to do a snapshot only
5) update-database

现在您将使用当前模型状态进行一次迁移,因此现在您可以进行模型更改、添加第二个迁移并生成更新脚本。

你也可以做一个幂等脚本,它会显示你所有的数据库对象,以防你想检查丢失的项目:

update-database -Script –SourceMigration $InitialDatabase

有关 EF operates under the hood 的详细信息,请参阅此处。