在 Azure Devops 中编写 EF6 迁移脚本

Posted

技术标签:

【中文标题】在 Azure Devops 中编写 EF6 迁移脚本【英文标题】:Script EF6 Migrations in Azure Devops 【发布时间】:2020-06-02 22:45:46 【问题描述】:

我有一个 EF6 项目,我想为迁移生成一个脚本。在本地,我只是运行update-database - script,但我想创建一个构建管道来为此生成一个脚本,然后是一个部署管道,当我们准备好推送到不同的环境时执行这个脚本。有没有办法在 Azure Devops Build Pipeline 中生成这样的脚本?

【问题讨论】:

你试过什么?你做了什么研究?什么没有奏效? 不能在命令行中使用 dotnet ef 命令,因为它不是核心项目。我在网上找不到任何关于在微软托管的虚拟机上运行相当于包管理器控制台的东西。 migrations.exe 之类的东西不起作用,因为它们不会生成脚本。 @Ashley Edds 无法获得您的最新信息,解决方法对您有帮助吗?或者,如果您有任何疑问,请随时在此处分享。 【参考方案1】:

对于这个问题,你可以试试Entity Framework Migration Extensions。

此任务允许 Build / Release 提供数据库连接参数并针对数据库执行 Entity Framework 6 迁移。

要完成此任务,您必须执行以下步骤:

    将项目构建到输出文件夹并包含 migrate.exe Entity Framework 6 附带的可执行文件。 创建一个自动构建,打包您的文件并制作它们 发布期间可访问。 为相关构建创建发布定义 添加 EF6 迁移任务。一旦将该任务添加到环境中 在版本中,您需要输入适当的参数 配置它。所有文件路径参数都应该在文件中 用于构建的系统,它们都不用于 TFS 源代码控制路径。

【讨论】:

这仅适用于 EF Core 吗?我遇到问题的项目是 EF6 和 dotnet ef 迁移脚本尚未用作命令行任务。 你可以试试Entity Framework Migration Extensions,这个扩展支持EF6。【参考方案2】:

我通过首先使用复制文件任务将整个项目从构建管道复制到工件暂存目录中来设法在我的发布管道中运行 EF6 迁移:

源文件夹:$(build.sourcedirectory)\<SolutionName>\

目标文件夹:$(build.artifactstagingdirectory)\EFMigration

然后在命令行任务中运行由“update-database”命令执行的脚本。 我通过在 EF6 项目的包管理器控制台中手动运行“update-database -verbose”命令来获取脚本,复制显示的脚本并将路径调整为我复制到工件暂存目录中的路径。它应该看起来像这样:

$(System.DefaultWorkingDirectory)/<..>/drop/EFMigration/packages/EntityFramework.6.4.4/tools/net45/any/ef6.exe database update --no-color --prefix-output --assembly $(System.DefaultWorkingDirectory)/<..>/drop/EFMigration/EFM.Data/bin/Release/EFM.Data.dll --project-dir $(System.DefaultWorkingDirectory)/<..>/drop/EFMigration/EFM.Data\ --language C# --data-dir $(System.DefaultWorkingDirectory)/<..>/drop/EFMigration/EFMigration/App_Data --root-namespace EFM.Data --config $(System.DefaultWorkingDirectory)/<..>/drop/EFMigration/EFMigration/Web.config

在我的情况下,“添加迁移”命令将在提交之前手动运行,并且创建的脚手架将自动用于发布管道。您可以使用与获取“Update-Database”脚本相同的方法来获取“Add-Migration”脚本,但我没有尝试自动执行此操作。

【讨论】:

以上是关于在 Azure Devops 中编写 EF6 迁移脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TFVC 项目从 Azure DevOps 服务器迁移到新的 Azure DevOps 帐户作为 Git 存储库

EF6 学习笔记:数据库迁移及部署

迁移到Azure DevOps Server 2019时,TFS 2018的Wiki会发生什么

Azure DevOps 服务器 - 如何将现有集合/项目迁移到 SCRUM

Azure Devops - 在 Nuget 包中从 .NET Core 3.1 迁移到 .NET 5 的兼容性问题

使用 C# 中的 azure devops API 在发布和构建定义中更新代理池