如何更改更新数据库 ef 迁移的连接字符串?

How do I change connection string for Update-Database ef migrations?

我正在尝试 运行 Update-Database,我想指定连接字符串,但 CLI 查找的是错误的字符串。我的 appsettings.json 文件中有两个连接字符串:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "LocalWindows": "data source=.\SQLEXPRESS;initial catalog=Intranet;persist security info=True;integrated security=true;",
    "AzureDevelopment": "Server=tcp:en..."
  }
}

当我运行 更新数据库时,AzureDevelopment 始终是它使用的密钥。因此,如果我将 LocalWindows 连接字符串复制到 AzureDevelopment 的值,它会更新正确的数据库。此外,如果我删除 AzureDevelopment 但像这样保留 LocalWindows:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "ConnectionStrings": {
    "LocalWindows": "data source=.\SQLEXPRESS;initial catalog=Intranet;persist security info=True;integrated security=true;"
  }
}

我得到:

Value cannot be null.
Parameter name: connectionString

所以似乎在某些时候,CLI 选择使用 AzureDevelopment 字符串,我无法再更改密钥或提供连接字符串作为参数。

我的问题是迁移 CLI 如何知道要使用什么连接字符串?它是通过启动设置上的一些反射魔术来检测字符串还是什么?我在网上看到的都是运行ning Update-Database时如何指定项目。 CLI 曾经有 -ConnectionString 和 -ConnectionStringName 参数,但这些参数不再可用。

我所要做的就是在 PowerShell 中执行以下操作:

$env:ASPNETCORE_ENVIRONMENT='LocalWindows' dotnet ef database update

$env:ASPNETCORE_ENVIRONMENT='LocalWindows' Update-Database

使用 Update-Database -verbose 打开详细信息还会在输出中向您显示环境,以确保它是正确的。

什么不起作用:

  • 在 Windows
  • 中设置全局 ASPNETCORE_ENVIRONMENT 环境变量
  • 在项目->设置->调试屏幕中设置ASPNETCORE_ENVIRONMENT环境变量

在 EF Core 5.0 中,可以像这样指定连接字符串:

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