我使用 Visual Studio 通过一定的迁移来更新我的所有环境。使用下面的命令效果很好。
update-database -Migration initMigrationProduct -c ProductContext -Environment Production
在 ef core 2.0 中,此命令已更改,参数 -Environment 已删除。在文档中它说。
“在2.0中,您可以使用ASPNETCORE_ENVIRONMENT环境变量 相反。”
https://learn.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
我现在已经尝试了各种方法,但是当我使用 ef core 2.0 运行
update-database
时,它不使用 ASPNETCORE_ENVIRONMENT
变量。我尝试在注册表、应用程序属性中进行设置。
请让我知道我需要做什么才能使其工作以更新不同的环境?
如果我使用不同的
launchsettings
启动应用程序,它可以工作,但不使用包管理器控制台。
要在 Visual Studio 内的包管理器控制台 (PMC) 中将 ASPNETCORE_ENVIRONMENT 变量设置为生产,请首先使用此命令
$env:ASPNETCORE_ENVIRONMENT='Production'
然后就可以使用了
Update-Database
通常。
从 EF Core 5.0 开始,还可以使用 --environment 参数提供环境,但您还需要在之前指定“--”标记:
dotnet ef database update -- --environment Production
正如文档所述:
-- 标记指示 dotnet ef 将后面的所有内容视为 参数而不是尝试将它们解析为选项。任何额外的参数都不是 dotnet ef 使用的内容会转发到应用程序
我和这个问题的记者有同样的问题,并在包管理器控制台(PMC)中尝试了最近的解决方案,并使用以下命令设置环境变量:
$env:ASPNETCORE_ENVIRONMENT='YOUR_ENVIRONMENT'
不幸的是,我有一个 ConsoleApplication,并在启动时使用通用主机构建器
Host.CreateDefaultBuilder()
。在这种情况下,环境变量前缀不是 ASPNETCORE_
而是 DOTNET_
。
对我来说,这个命令在 PMC 中有效:
$env:DOTNET_ENVIRONMENT='YOUR_ENVIRONMENT'
我要感谢 Martin Florin 和其他人引导我走向正确的方向。
您可以在命令行/终端中使用以下命令来设置环境变量。
$env:ASPNETCORE_ENVIRONMENT = 'Development'
dotnet ef migrations add newMigrationTest
根据EntityFrameworkCore#6846,正确的解决方案是使用
--environment
选项,dotnet ef
命令不尊重ASPNETCORE_ENVIRONMENT
dotnet ef database update -- --environment Production
在 Visual Studio 中使用包管理器对我来说是一个死胡同。 解决方案是:
在解决方案的启动项目中的.csproj中添加以下内容:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
</ItemGroup>
打开命令工具(cmd)并进入与启动项目所在的.csproj相同的文件夹(默认项目)。
按照 Anton Toshik 的建议运行命令
set ASPNETCORE_ENVIRONMENT=Production
4.然后运行命令
dotnet ef database update initMigrationProduct -c ProductContext
现在就可以了。
备注:在此命令中,
database
和update
自早期版本以来已更改位置。并且没有用于迁移的参数/代码。文档在此澄清后进行了更多解释: