为 ASP.NET Core 中的开发和生产环境更新 Entity Framework 中的数据库

Updating databases in Entity Framework for development and production environments in ASP.NET Core

如何将 EF 迁移应用到多个数据库,根据需要引用开发或生产环境?

TL;DR

我正在使用 Entity Framework 开发一个 ASP.NET 核心 MVC 应用程序,该应用程序为开发和生产引用不同的数据库。两个数据库都托管在 Azure SQL 数据库中。

应用程序目前 运行 在我的开发机器上的 IIS Express 上运行,但我会将生产环境部署到 Azure 应用服务。我正在使用 Entity Framework 和迁移来更新数据库设计。

我已应用 为开发或生产启动配置使用不同的数据库连接字符串,这似乎有效。然后将连接字符串存储在 appsettings.Development.jsonappsettings.Production.json.

当我 select DEV 启动配置时,我可以使用 EF cli 命令 dotnet ef database update 将我的迁移应用到开发数据库。工作正常。

但是,当我 运行 在 PROD 启动配置下时,我不知道如何告诉 Visual Studio 将每个迁移应用到生产数据库。

运行 更改启动配置后的命令 dotnet ef database update 继续引用开发数据库,​​没有任何变化。 对此我并不感到惊讶 - 我还没有告诉 Visual Studio 在哪里可以找到其他数据库。但我也不知道该怎么做。

有没有办法根据启动配置或环境变量更改引用的数据库?或者其他方便的方式?

launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:57961",
      "sslPort": 44320
    }
  },
  "profiles": {
    "IIS Express (dev)": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express (prod)": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      }
    }
  }
}

根据documentation,可以将连接字符串指定为额外参数:

--connection: The connection string to the database. Defaults to the one specified in AddDbContext or OnConfiguring.

所以这个命令会让你指定你的目标数据库:

dotnet ef database update --connection "<sql connection string>"