【问题标题】:EF6 - Restoring previous database schema from __MigrationHistoryEF6 - 从 __MigrationHistory 恢复以前的数据库架构
【发布时间】:2018-08-13 07:05:36
【问题描述】:

我读到__MigrationHistory 表被使用solely by EF

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    相关资源
    最近更新 更多