如何从Visual Studio Online运行实体框架的迁移.exe?



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

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

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

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

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

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

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

详细地:

  1. 复制文件"任务">
    • 源文件夹:$(build.sourcesdirectory(
    • 内容: Contoso.EF\bin\debug\ **
    • 目标文件夹:$(build.artifactstagingdirectory(/EF
  2. 复制文件"任务">
    • 源文件夹: $(build.sourcesDirectory(\packages\EntityFramework.6.1.3\tools
    • 内容:迁移.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-command 及其参数组合在一起:

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

我假设你使用的是 vNext 生成,请先在生成定义中添加"Nuget 安装程序"任务,以便在生成期间还原实体框架。迁移.exe将安装在 \packages\EntityFramework.\tools 文件夹中。然后添加"命令行"任务以运行迁移.exe。在"工具"区域中输入"\packages\EntityFramework.\tools\migrate.exe",在"参数"字段中输入参数。

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

将以下内容添加到 global.asax 中的 Application_Start(( 事件

var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();

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

最新更新