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

问题描述 投票:0回答:1

我读到__MigrationHistory表用的是solely by EF

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

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

sql-server entity-framework entity-framework-6 ef-migrations
1个回答
2
投票

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.