如何从Visual Studio Online运行Entity Framework的migrate.exe?

时间:2016-01-30 21:47:40

标签: entity-framework azure-devops

我已使用count构建定义为我的项目设置了持续集成。

在部署我的数据库(到Azure测试环境)时,我只使用正确的发布设置构建我的Visual Studio Online

但我想切换到SQL Server Database Project的代码优先方法并利用迁移功能,这需要我调用migrate.exe。

我的问题是 - 如何从Entity Framework构建定义运行migrate.exe?

3 个答案:

答案 0 :(得分:8)

我们通过以下方式在TFS Build vNext的基础上成功实施了部署时的自动EF代码首次迁移:

它基本上涉及3个步骤(每个EF上下文):

  1. 将EF项目复制到临时目录
  2. 将migrate.exe复制到同一文件夹中( migrate.exe需要放在包含EF迁移的程序集旁边
  3. 执行migrate.exe
  4. 详细说明:

    1. 复制文件“任务”
      • 源文件夹:$(build.sourcesdirectory)
      • 目录:Contoso.EF \ bin \ debug \ **
      • 目标文件夹:$(build.artifactstagingdirectory)/ EF
    2. 复制文件“任务”
      • 源文件夹:$(build.sourcesDirectory)\ packages \ EntityFramework.6.1.3 \ tools
      • 目录:migrate.exe
      • 目标文件夹:$(build.artifactstagingdirectory)\ EF \ Contoso.EF \ bin \ debug \ bin \ debug
    3. 批处理脚本“任务”
      • 路径:$(build.sourcesdirectory)_Deploy \ MigrateEFContext.bat
      • 参数:$(build.artifactstagingdirectory)\ EF \ Contoso.EF \ bin \ debug Contoso.EF.dll [SQL-SERVER-INSTANCE] [DbName] System.Data.SqlClient
    4. MigrateEFContext.bat文件使用其参数组装migrate.exe命令:

      SET EFDir=%1
      SET EFContext=%2
      SET connStringDataSource=%3
      SET connStringInitialCatalog=%4
      SET connectionProviderName=%5
      
      %EFDIR%\migrate.exe %EFContext% /ConnectionString:"Data Source=%connStringDataSource%;Initial Catalog=%connStringInitialCatalog%;Integrated Security=true" /connectionProviderName:%connectionProviderName% /verbose
      

答案 1 :(得分:7)

我假设你正在使用vNext构建,添加一个" Nuget Installer"构建定义中的任务首先在构建期间还原实体框架。 Migrate.exe将安装在\ packages \ EntityFramework。\ tools文件夹中。然后添加一个"命令行"任务运行migrate.exe。输入“\ packages \ EntityFramework。\ tools \ migrate.exe"在"工具"区域和参数"参数"字段。

答案 2 :(得分:3)

您还可以查看在App启动时执行迁移。

将以下内容添加到global.asax

中的Application_Start()事件中
var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();

这将在每次应用程序启动时触发迁移。你也可以用条件逻辑进行包装来控制它的触发方式。