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

use*_*980 6 entity-framework azure-devops

我已经使用Visual Studio Online构建定义为我的项目设置了持续集成.

在部署我的数据库(到Azure测试环境)时,我只SQL Server Database Project使用正确的发布设置构建我的数据库.

但我想切换到Entity Framework代码第一种方法并利用迁移功能,这需要我调用migrate.exe.

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

use*_*498 8

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

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

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

详细地:

  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

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
Run Code Online (Sandbox Code Playgroud)


Edd*_*SFT 7

我假设您正在使用vNext构建,首先在构建定义中添加"Nuget Installer"任务,以在构建期间还原Entity Framework.Migrate.exe将安装在\ packages\EntityFramework.\ tools文件夹中.然后添加"命令行"任务以运行migrate.exe.在"工具"区域中输入"\ packages\EntityFramework.\ tools\migrate.exe",在"参数"字段中输入参数.

  • 据我所知,通配符不能在命令行任务中使用.那么如何消除EF版本的依赖? (3认同)