多个开发环境中的实体框架代码优先迁移

Entitiy Framework code-first migrations in multiple development environments

我正在开发一个使用 EF6code-first 迁移 的项目。 到目前为止的所有工作都是在 Dev 上完成的。环境,包括数据库迁移。

我需要将代码部署到另一个环境 (QA),但是我遇到了一个问题:
数据库存在,但是没有 table(我手动创建了数据库)。

目前,QA 中的代码会抛出 Invalid object name 'dbo.__MigrationHistory'. 并且 QA 中确实不存在此 table,它仅存在于首次启用迁移的 DEV 中。

在多个开发环境中处理迁移的最佳做法是什么 (DEV => QA => STG => PROD)? 我最好的做法是什么?

更新:
我手动创建了 dbo.__MigrationHistory 和架构,并从 DEV table 填充了迁移 table。这个问题仍然存在,因为我必须在本月晚些时候部署到 STG 和 PROD。

您可以尝试以下几种选择:

1- 使用数据库初始化器:

Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>());

2- 使用 ssdt 在环境(qa、dev、prod 等)之间迁移表和数据

如果您利用某种持续集成,您可以按如下方式进行:

  1. 在将转换的迁移项目中创建构建配置 构建时满足环境要求(使用 XDT)的连接字符串,
  2. 使用 MSBuild 使用各自的配置参数构建项目,
  3. 使用 migrate.exe(例如从 EF Nuget 包的文件夹)到 运行 使用内置 DLL 的迁移。

如果您不这样做 CI,那么您可以只执行第一步并始终使用使用相应构建配置构建的迁移项目进行部署。 注意:手动搞砸 __MigrationHistory table 绝不是好的做法。

要创建数据库,您可以使用 CreateDatabaseIfNotExists 初始化程序。