如何更改Update-Database ef迁移的连接字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更改Update-Database ef迁移的连接字符串?相关的知识,希望对你有一定的参考价值。

我正在尝试运行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..."
  }
}

当我运行Update-Database时,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如何知道要使用哪个连接字符串?它是通过启动设置上的一些反射魔法来检测字符串还是什么?我在网上看到的是如何在运行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环境变量
  • 在Project-> Settings-> Debug屏幕中设置ASPNETCORE_ENVIRONMENT环境变量

以上是关于如何更改Update-Database ef迁移的连接字符串?的主要内容,如果未能解决你的问题,请参考以下文章

连接更新数据库命令的EF6问题

切换分支时如何解决Update-Database问题?

EF CodeFirst数据迁移与防数据库删除

EF CodeFirst 通过代码生成数据库

EF Core - 代码优先迁移:关键字“NOT”附近的语法不正确

运行 update-database 导致错误:“发生文件激活错误”