Ef core не использует ASPNETCORE_ENVIRONMENT во время обновления базы данных

Я использую visual studio для обновления всех моих сред с определенной миграцией. Он работал отлично, используя команду ниже.

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

В ef core 2.0 эта команда была изменена, а параметр -Environment удален. в документах, которые он сказал.

"С помощью 2.0 вы можете использовать переменную среды ASPNETCORE_ENVIRONMENT вместо".

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

Я сейчас пробовал всевозможные способы, но когда я запускаю update-database с ef core 2.0, он не использует переменную ASPNETCORE_ENVIRONMENT. Я попытался установить в реестре, свойства приложения.

Пожалуйста, дайте мне знать, что мне нужно сделать, чтобы это работало с обновлением разных сред?

Если я запускаю приложение с разными настройками lanch, он работает, но не использует консоль менеджера пакетов.

Ответ 1

Использование менеджера пакетов в Visual Studio было для меня тупиком. Решение было:

  1. Добавьте ниже в .csproj в стартовый проект в решении:

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    </ItemGroup>
    
  2. Откройте командный инструмент (cmd) и перейдите в ту же папку, где находятся .csproj для запуска проекта (Проект по умолчанию).

  3. Запустите команду, как Антон Тошик предложил set ASPNETCORE_ENVIRONMENT=Production

4. Затем запустите команду dotnet ef database update initMigrationProduct -c ProductContext И теперь все работает.

ЗАМЕЧАНИЕ: в этой команде database и update поменялись местами с более ранних версий. И нет никаких аргументов/кода для миграции. Документы объясняют больше после этого разъяснения:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

Ответ 2

Чтобы установить переменную ASPNETCORE_ENVIRONMENT в консоли диспетчера пакетов (PMC), внутри визуальной студии, в Production используйте эту команду сначала

$env:ASPNETCORE_ENVIRONMENT='Production'

Затем вы можете использовать

Update-Database

нормально.

Ответ 3

Согласно EntityFrameworkCore # 6846 правильное решение состоит в том, чтобы использовать --environment, команды dotnet ef не уважают ASPNETCORE_ENVIRONMENT

dotnet ef database update --environment Production

Ответ 4

Недавно у меня была проблема с инструментом EF, не использующим строки подключения из моего файла "appsettings.Production", оказывается, что если у инструмента EF возникнут проблемы с "appsettings.Production" (например, нулевой строкой), он вернется к использованию настроек приложений, Мне не удалось увидеть, что это записано в консоль с помощью инструмента EF, но при использовании флага "-verbose" при обновлении базы данных среда будет записана в консоль. Просто хотел бы упомянуть об этом, так как я нигде не видел этого документированного.