EF 迁移在 Github 操作中不起作用,相同的命令在本地工作

问题描述 投票:0回答:3

我可以在本地运行以下命令来使用 Entity Framework Core 迁移更新我的数据库:

dotnet ef database update 0 --project src\MyProject\MyProject.csproj --startup-project src\MyStartupProject\MyStartupProject.csproj --context MyDbContext

但是,当我尝试在 GitHub 操作中运行它时,出现错误。

行动:

name: Migrate DB
on:
  workflow_dispatch:
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository code
        uses: actions/checkout@v3
      - name: Migrate DB
        shell: pwsh
        run: |
          dotnet tool install --global dotnet-ef
          dotnet tool restore

          dotnet ef database update 0 --project src\MyProject\MyProject.csproj --startup-project src\MyStartupProject\MyStartupProject.csproj --context MyDbContext

错误是:

/home/runner/work/MyProject/MyProject/src/MyProject/MyProject.csproj : 错误 MSB4057:目标“GetEFProjectMetadata”不存在于 项目。无法检索项目元数据。确保它是 SDK 风格 项目。如果您使用自定义 BaseIntermediateOutputPath 或 MSBuildProjectExtensionsPath 值,使用 --msbuildprojectextensionspath 选项。

据我所知,我没有使用自定义 BaseIntermediateOutputPath 或 MSBuildProjectExtensionsPath 值。这些项目是一个

dotnet 6
Web 项目和内置的类库
C#

我尝试按照类似问题中的建议添加

--msbuildprojectextensionspath
和值
obj/local
但没有效果。

asp.net-core entity-framework-core github-actions entity-framework-migrations
3个回答
1
投票

您可以在程序类中迁移数据库,而不是在 github yml 文件中添加此命令:

在新程序类(ASP .NET 6)中:

using var scope = app.Services.CreateScope();

using var appContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();

appContext.Database.Migrate();

经典程序课中:

var host = CreateHostBuilder(args).Build();

using var scope = host.Services.CreateScope();
var services = scope.ServiceProvider;
var context = services.GetRequiredService<ApplicationDbContext>();
context.Database.Migrate();

await host.RunAsync();            

如果您的数据库不是最新的,它将迁移。


0
投票

有点掌脸。事实证明,这是因为我没有首先在管道中构建项目,这意味着 git 忽略的项目不存在。我认为问题是缺少

obj
文件夹。

解决方案是使用

dotnet-ef
而不是
dotnet ef
,它会在尝试迁移之前构建项目(尽管我认为事先简单运行
dotnet build
也可能有效)。

dotnet-ef database update 0 --project src\MyProject\MyProject.csproj --startup-project src\MyStartupProject\MyStartupProject.csproj --context MyDbContext

0
投票

我遇到了同样的问题,它可以在本地运行,但不能在 Azure DevOps Agent 上运行。

代理是Ubuntu,因此将路径从

\
更改为
/
后,就可以正常工作了。

© www.soinside.com 2019 - 2024. All rights reserved.