【问题标题】:Managing EF migrations in Azure DevOps Pipeline在 Azure DevOps Pipeline 中管理 EF 迁移
【发布时间】:2021-03-14 23:25:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: entity-framework azure-devops database-migration azure-devops-pipelines


    【解决方案1】:

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

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

    原来如此

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

    或使用 dotnet 工具

    dotnet ef database update <targetMigration>
    

    【讨论】:

      【解决方案2】:

      不确定是否完全明白你的意思,你可以看看这篇文章--Entity Framework Core migrations through CI and CD in Azure DevOps

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

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

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

      【讨论】:

      • 感谢您的回复。我查看了这两篇文章并尝试实施他们的解决方案,但我在运行 dotnet 命令时遇到了问题。它一直说我与 EF Core 有循环依赖关系。我知道它们都使用 EF Core,而我使用的是 EF 6。你知道这是否意味着我根本无法使用 dotnet 命令?
      • @Andrew 抱歉对 EF 6 不太熟悉。如果您能够在本地使用相同的命令行。它还应该符合 Azure DevOps 的要求。否则,您可能无法对 EF6 使用 dotnet 命令。或者,您可以尝试按照 Krzysztof Madej 的建议使用带有 -Migration 参数的 Update-Database 命令:
      • 是的,看起来我无法将 dotnet 与 EF 6 一起使用。而且我认为他们的解决方案不会对我有用,因为 Update-Database 也只能由 EF Core 使用(在至少据我所知)。
      【解决方案3】:

      所以我想我遇到的最大问题是我的项目使用的是 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,然后查看以github comment 发布的转换表。

      上面链接的github评论转换表

      【讨论】:

      • 感谢分享,您可以标记为回复
      • 真的很抱歉,我刚开始在堆栈溢出上发帖。您只是将其标记为已接受的答案,还是我应该对我的原始问题发表评论?
      • @Andrew,他可能会少写一部分,应该标记它,将您的回复标记为答案。所以,张伯伦的意思是你可以接受你自己的答案,所以它对阅读这个帖子的其他社区成员是有益的:)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 2021-08-22
      • 1970-01-01
      相关资源
      最近更新 更多