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 было для меня тупиком. Решение было:
-
Добавьте ниже в .csproj в стартовый проект в решении:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
</ItemGroup>
-
Откройте командный инструмент (cmd) и перейдите в ту же папку, где находятся .csproj для запуска проекта (Проект по умолчанию).
-
Запустите команду, как Антон Тошик предложил 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" при обновлении базы данных среда будет записана в консоль. Просто хотел бы упомянуть об этом, так как я нигде не видел этого документированного.