Cymricus
Cymricus

Reputation: 359

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

I am trying to run Update-Database, and I would like to specify the connection string, but the CLI is looking at the wrong one. There are two connection strings in my appsettings.json file:

{
  "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..."
  }
}

When I run Update-Database, AzureDevelopment is always the key it uses. So if I copy the LocalWindows connectionstring to AzureDevelopment's value, it updates the correct database. Furthermore, if I delete AzureDevelopment but leave LocalWindows like this:

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

I get:

Value cannot be null.
Parameter name: connectionString

So it seems at some point, the CLI chose to use the AzureDevelopment string, and I can no longer change the key or supply the connection string as an argument.

My question is how does the migrations CLI know what connection string to use? Is it detecting the string through some reflection magic on the startup settings or what? All I see online is how to specify the project when running Update-Database. There used to be -ConnectionString and -ConnectionStringName parameters for the CLI, but those are no longer available.

Upvotes: 9

Views: 10524

Answers (2)

Assaf S.
Assaf S.

Reputation: 4894

In EF Core 5.0, it is possible to specify the connection string like this:

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

Upvotes: 2

Cymricus
Cymricus

Reputation: 359

All I had to do was the following in PowerShell:

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

or

$env:ASPNETCORE_ENVIRONMENT='LocalWindows' Update-Database

Turning on verbose with Update-Database -verbose also shows you the environment in the output to make sure it's hitting the correct one.

What doesn't work:

  • Setting a global ASPNETCORE_ENVIRONMENT environment variable in Windows
  • Setting the ASPNETCORE_ENVIRONMENT environment variable in the Project->Settings->Debug screen

Upvotes: 14

Related Questions