在 Azure DevOps 管道中管理 EF 迁移

Managing EF migrations in Azure DevOps Pipeline

因此我们的团队实施了 Windows 自托管 Azure DevOps 测试管道。在我们 运行 对具有数据库迁移的 b运行ch 进行后端测试之前,它一直运行良好。尽管测试按预期通过,但此迁移更改了代理的数据库。这导致主 b运行ch 上的每个后续集成测试 运行 都失败了。通常它只是 'down' 迁移,它会很好,但这里迁移不存在,因为它在 b运行ch 中,尚未合并到 master 中。

我看了很多关于 EF 迁移的其他帖子,它们似乎都在谈论发布管道和创建新的迁移。我想要做的就是在我的管道末尾有一个步骤,可以将数据库更新到 master 的最新迁移。但是,我不知道该怎么做,因为我无权访问 NuGet 数据包管理器控制台。有谁知道我如何将数据库更新为适当的迁移?我对 Azure DevOps 管道也很陌生,所以如果这出于某种原因被误导,请告诉我。感谢您的帮助,如果我能提供更多信息,请告诉我。

如果有任何帮助,我们将使用它来根据 NuGet 数据包管理器控制台中的给定目标迁移更新数据库:

Update-Database -projectName <projectName> -targetMigration <targetMigration> -configurationTypeName <configurationType> -connectionStringName <connectionString>

根据文档 Update-Database 你应该使用 -Migration 参数:

The target migration. Migrations may be identified by name or by ID. The number 0 is a special case that means before the first migration and causes all migrations to be reverted. If no migration is specified, the command defaults to the last migration.

所以会是

Update-Database -Project <projectName> -Migration <targetMigration> -Connection <connectionString>

或使用 dotnet 工具

dotnet ef database update <targetMigration>

不确定是否完全明白你的意思,你可以看看这篇文章--

You can use the --idempotent option which will add code to the script so that only the appropriate migrations are applied to the database. This effectively makes the sql script the equivalent of running update-database in the package manager console.

以EntityFrameworkCore为例。可以使用“dotnet ef migrations”命令将 DbContext 转换为数据库。至于如何使用dotnet ef命令行来处理进程。

请参阅此博客-- EntityFrameworkCore, code-first migrations in Azure DevOps 了解更多详情。

所以我想 运行 我遇到的最大问题是我的项目使用的是 EF 6,但大多数在线解决方案都希望您使用 dotnet 命令。据我所知(如果我弄错了请告诉我)EF 6 不能使用 dotnet 命令。

为了解决这个问题,我使用了 ef6.exe,它允许您通过命令行进行迁移。在管道中,我只是将 ef6.exe 移动到我的项目程序集文件所在的位置并执行迁移。这对我有用,但对于任何使用 EF Core 的人来说,PatrickLu-MSFT 的解决方案应该有效并且更直接。

尽管它在 EF 6.3 中从 migrate.exe 进行了更改,但看起来 Microsoft 并未更新 ef6.exe 的文档。要了解它是什么,您可以查看过时的 migrate.exe documentation and then the conversion table that was posted as a github comment.

转换 table 来自上面链接的 github 评论