如何在 Azure 部署的应用程序中应用数据库代码优先迁移?

How to apply database code first migrations in an azure deployed application?

我刚刚将应用程序部署到 Azure 应用服务中。 我的项目确实有要应用的迁移。 但是我无法通过使用 azure app 命令行来应用它们

dotnet ef database update

D:\home\site\wwwroot> No executable found matching command "dotnet-ef"

如何远程应用它们?

在 Azure 上 运行 迁移的最佳方法之一是 运行ning update-database Visual Studio 命令。但是这个命令不会运行。您的客户端 IP 地址应该可以访问 Azure。

您可以关注RUN MIGRATIONS ON THE AZURE。 Asp.Net 零建立在 Asp.Net 核心之上,因此这些步骤对您有用。

对于 dotnet-ef,我假设您在谈论 Entity Framework 核心。我试过在KUDU的D:\home\site\wwwroot下运行 dotnet ef database update和VS的Package Manager Console下,我可能会遇到和你提到的同样的问题。

我发现了一个类似的问题No executable found matching command "dotnet-ef"

DotNet CLI can only resolve "dotnet-ef" when it is within the project directory.

我可以通过 Powershell 运行 命令 dotnet ef migrations adddotnet ef database update。详细的命令用法可以关注EF Core .NET Command-line Tools.

How to apply database code first migrations in an azure deployed application?

据我了解,您不能那样做。您可能需要手动 运行 update-database 作为 vivek nuna 在 VS 的包管理器控制台下回答,或者您可以使用 Powershell 和 cd 到您的项目目录,并执行 dotnet ef database update 以应用任何挂起的迁移为您的数据库上下文,然后将您的应用程序部署到 azure web 应用程序。

此外,EF不支持自动迁移,您可能需要手动执行Add-Migrationdotnet ef migrations add来添加迁移文件。您可以显式执行命令来应用迁移,也可以在代码中应用迁移。您可以在 Startup.cs 文件的 Configure 方法中添加以下代码:

using (var scope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
{
    scope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
}

另外,你也可以关注这个类似的

我有一个非常相似的问题。我正在开发一个 .NET Core 3.0 网络应用程序(Visual Studio Angular 带有个人用户帐户的模板)。我正在使用 AzureDevops 构建项目并将其发布到 Azure 上的应用服务。

首先,你可以使用

dotnet tool install --global dotnet-ef --version {version compatible with your project}

在您的管道中,在构建过程中为 dotnet 安装 ef 扩展。

我假设您要更新 remote/production 数据库。要以安全的方式执行此操作,您可以将具有特定凭据和连接字符串的 appsettings.json 文件上传到 Azure Azure DevOps 管道中的 安全文件 。见下图。

appsettings.json in Secure files

然后您可以通过 Download Secure File task 在您的构建管道中引用该文件(将该文件下载到构建的工作目录中)并使用 dotnet ef 数据库更新 像这样:

migration script

注意上面的迁移脚本中:

  • app 是我的项目名称,
  • 我将我的文件重命名为 appsettings.json,因为我已经使用不同的名称将其上传到 Secure files
  • 您不需要使用 lscat 命令 - 它们用于调试目的
  • 命令 dotnet ef 数据库更新 使用您上传到 Secure Files 的产品 appsettings.json。

您可以在 appsettings.json 而不是本地设置 Azure 连接字符串并执行迁移或 dotnet ef database update