多个开发环境中的Entitiy Framework代码优先迁移

时间:2015-06-08 11:24:58

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

我正在开发一个使用 EF6 代码优先迁移的项目。 迄今为止的所有工作都是在Dev上完成的。环境,包括数据库迁移。

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

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

在多个开发环境(DEV => QA => STG => PROD)中使用迁移的最佳做法是什么? 我最好的行动方式是什么?

更新
我手动创建了dbo.__MigrationHistory和模式,并从DEV表中填充了迁移表。问题仍然存在,因为我将在本月晚些时候部署到STG和PROD。

2 个答案:

答案 0 :(得分:1)

如果您使用某种持续集成,您可以按以下步骤操作:

  1. 在将要转换的迁移项目中创建构建配置 连接字符串以适应环境'构建时的要求(使用XDT),
  2. 使用MSBuild使用相应的配置参数
  3. 构建项目
  4. 使用migrate.exe(例如来自EF Nuget软件包的文件夹)使用构建的DLL运行迁移。
  5. 如果您没有执行CI,那么您可以按照第一步进行操作,并始终使用使用相应构建配置构建的迁移项目进行部署。 注意:手动搞乱__MigrationHistory表永远不是好习惯。

    要创建数据库,您可以使用CreateDatabaseIfNotExists初始值设定项。

答案 1 :(得分:0)

您可以尝试一些选项:

1-使用数据库初始化程序:

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

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