ef core doesn't use ASPNETCORE_ENVIRONMENT during update-database

I use visual studio to update all my environments with a certain migration. It had worked fine using the command below.

update-database -Migration initMigrationProduct -c ProductContext -Environment Production

In ef core 2.0 this command has been changed and parameter -Environment has been removed. In the docs it said.

"With 2.0, you can use the ASPNETCORE_ENVIRONMENT environment variable instead."

https://learn.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

I have now tried all kinds of ways but when I run the update-database with ef core 2.0 it doesn't use the ASPNETCORE_ENVIRONMENT variable. I tried to set in registry, application properties.

Please let me know what I need to do to get this working to update different environments?

If I start the application with different launchsettings it works but not using the package manager console.

46009 次浏览

Using the package manager in Visual Studio was a dead end for me. The solution was:

  1. Add below in .csproj in the starter project in solution:

    <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    </ItemGroup>
    
  2. Open the command tool(cmd) and go the the same folder as .csproj for start project are located(Default project).

  3. Run the command as Anton Toshik suggested set ASPNETCORE_ENVIRONMENT=Production

4.Then run the command dotnet ef database update initMigrationProduct -c ProductContext And now it works.

REMARK: in this command database and update have changed place since earlier versions. And there are no argument/code for migration. The docs explain more after this clarification:
https://learn.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

To set the ASPNETCORE_ENVIRONMENT variable in Package Manager Console (PMC) , inside visual studio, to Production use this command first

$env:ASPNETCORE_ENVIRONMENT='Production'

Then you can use

Update-Database

normally.

According to EntityFrameworkCore#6846 the correct solution is to use the --environment option, the dotnet ef commands do not respect ASPNETCORE_ENVIRONMENT

dotnet ef database update --environment Production

I had the same problem like the reporter of this issue and tried out the recent solution in the Package Manager Console (PMC) and set the environment variable with the command:

$env:ASPNETCORE_ENVIRONMENT='YOUR_ENVIRONMENT'

Unfortunetly I have a ConsoleApplication and use the generic host builder on startup with Host.CreateDefaultBuilder(). In this scenario the environment variable prefix is not ASPNETCORE_ but DOTNET_.

For me this command works in PMC:

$env:DOTNET_ENVIRONMENT='YOUR_ENVIRONMENT'

I want to thank Martin Florin and others to guide me in the correct direction.

Starting in EF Core 5.0, the environment can also be provided using the --environment argument, but you also need to specify a '--' token before:

dotnet ef database update -- --environment Production

As the documentation states:

The -- token directs dotnet ef to treat everything that follows as an argument and not try to parse them as options. Any extra arguments not used by dotnet ef are forwarded to the app

You can use the following in the command line/terminal for setting the environment variable.

$env:ASPNETCORE_ENVIRONMENT = 'Development'
dotnet ef migrations add newMigrationTest