EF6 - 从__MigrationHistory恢复以前的数据库模式

时间:2018-03-05 15:16:53

标签: sql-server entity-framework entity-framework-6 ef-migrations

我读到使用__MigrationHistory表格solely by EF

我有一个团队在同一个项目上工作,我们总是遇到应用程序中版本控制文件 EF6 创建的问题,我每次创建迁移时都必须删除它们,有人创建了另一个在我之前(与其他团队成员一样)。

有没有办法仅使用__MigrationHistory表中的数据来恢复以前版本的数据库模式?或者,如果没有在应用程序中创建 EF6 的版本控制文件?

1 个答案:

答案 0 :(得分:2)

干净的方法是正确定义迁移文件中的Down()方法。然后,您可以使用以下命令返回到某个版本的DB:

Update-Database -TargetMigration <Name of last migration to be applied>

有时,您也可以通过在两次迁移之后添加空迁移来使EF感到高兴,并且#34;合并&#34;。这个空迁移就在那里,所以EF可以更新其内部状态并正确地将其写入_MigrationHistory。这应该摆脱&#34;无法更新数据库以匹配当前模型,因为存在挂起的更改并且禁用了自动迁移。&#34;错误。

为了防止您所描述的并行创建迁移问题,我们始终使用以下过程:

  • 任何时候只有一个团队应该对已检出的数据库模型进行更改
  • 在添加新迁移之前,请始终获取最新版本并应用Update-Database
  • 现在只对POCO / ModelBuilder / DbContext
  • 进行更改
  • 使用Add-Migration添加迁移,并定义Down()方法
  • 在允许其他人更改数据库模型之前检查您的更改
  • 跟踪要在Excel文件中应用的迁移(用于维护/支持)

请注意,每个DbContext都会跟踪模型更改,因此也许可以将DbContext拆分为每个团队的一个单独的上下文。这将导致每个DbContext的一组迁移,即团队。