Code-First 迁移问题

Posted

技术标签:

【中文标题】Code-First 迁移问题【英文标题】:Code-First migrations issue 【发布时间】:2016-08-04 03:48:36 【问题描述】:

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

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

【问题讨论】:

您应该强烈避免从您的解决方案中删除已应用的迁移。如果您可以使用 CVS 恢复文件,那么这对您来说是一个很好的步骤。现在您的迁移状态不一致 - __MigrationHistory 表知道存在创建表的迁移,但您的项目对此一无所知。 【参考方案1】:

一旦将迁移应用到您关心的所有已部署数据库,只需重新建立新基线就没什么大不了的。您将失去回滚到先前迁移的能力,但如果需要,有一些方法可以做到这一点。我经常汇总我的迁移或在未使用它们的现有数据库上开始迁移。

您可以采取以下措施恢复同步:

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的详细信息,请参见此处。

【讨论】:

以上是关于Code-First 迁移问题的主要内容,如果未能解决你的问题,请参考以下文章

20.翻译系列:Code-First中的数据库迁移技术EF 6 Code-First系列

Entity Framework学习-实体框架中的code-first迁移

20.2.翻译系列:EF 6中基于代码的数据库迁移技术EF 6 Code-First系列

EF中 Code-First 方式的数据库迁移

20.1翻译系列:EF 6中自动数据迁移技术EF 6 Code-First系列

Code-First,当我进行启用迁移时,我得到“在程序集'DOC'中找不到上下文类型”