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系列