1

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

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

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

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

3 回答 3

0

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

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

尽管它在 EF 6.3 中从 migrate.exe 进行了更改,但看起来 Microsoft 并未更新 ef6.exe 的文档。要了解它是什么,您可以查看过时的migrate.exe 文档,然后查看作为github 评论发布的转换表。

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

换算表:

于 2020-12-04T22:08:38.087 回答
0

根据文档更新数据库,您应该使用-Migration参数:

目标迁移。迁移可以通过名称或 ID 来标识。数字 0 是一种特殊情况,表示在第一次迁移之前并导致所有迁移都被还原。如果未指定迁移,则该命令默认为最后一次迁移。

所以它会是

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

或使用 dotnet 工具

dotnet ef database update <targetMigration>
于 2020-12-03T06:35:26.977 回答
0

不确定是否完全明白你的意思,你可以看看这篇文章 ——在 Azure DevOps 中通过 CI 和 CD 进行实体框架核心迁移

您可以使用--idempotent选项将代码添加到脚本中,以便仅将适当的迁移应用于数据库。这有效地使 sql 脚本等效于在包管理器控制台中运行 update-database。

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

请参阅此博客——EntityFrameworkCore ,Azure DevOps 中的代码优先迁移以 了解更多详细信息。

于 2020-12-03T06:47:14.527 回答