我使用visual studio通过一定的迁移来更新我的所有环境。它使用下面的命令工作正常。
update-database
在ef core 2.0中,此命令已更改,参数-Environment已被删除。在文档中它说。
“使用2.0,您可以使用ASPNETCORE_ENVIRONMENT环境变量 代替“。
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
我现在尝试了各种方法但是当我使用ef core 2.0运行ASPNETCORE_ENVIRONMENT
时,它不使用{{1}}变量。我试着在注册表中设置应用程序属性。
请让我知道我需要做些什么来更新不同的环境?
如果我使用不同的lanchsettings启动应用程序,它可以工作但不使用包管理器控制台。
答案 0 :(得分:38)
要在包管理器控制台(PMC)中设置ASPNETCORE_ENVIRONMENT变量,在visual studio内部,生产首先使用此命令
$env:ASPNETCORE_ENVIRONMENT='Production'
然后你可以使用
Update-Database
正常。
答案 1 :(得分:5)
从 EF Core 5.0 开始,也可以使用 --environment 参数提供环境,但您还需要在之前指定一个 '--' 标记:
dotnet ef database update -- --environment Production
正如 documentation 所述:
<块引用>-- 令牌指示 dotnet ef 将其后的所有内容视为 参数而不是尝试将它们解析为选项。任何额外的参数不 由 dotnet ef 使用的被转发到应用程序
答案 2 :(得分:2)
根据EntityFrameworkCore#6846的正确解决方案是使用--environment
选项,dotnet ef
命令不遵守ASPNETCORE_ENVIRONMENT
dotnet ef database update --environment Production
答案 3 :(得分:1)
在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
自早期版本以来已更改位置。并且没有用于迁移的参数/代码。在澄清之后,文档会解释更多:
https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet
答案 4 :(得分:1)
我遇到了与该问题的报告者相同的问题,并在程序包管理器控制台(PMC)中试用了最新的解决方案,并使用以下命令设置了环境变量:
$env:ASPNETCORE_ENVIRONMENT='YOUR_ENVIRONMENT'
不幸的是,我有一个ConsoleApplication,并在启动Host.CreateDefaultBuilder()
时使用了通用主机生成器。在这种情况下,环境变量前缀不是ASPNETCORE_
,而是DOTNET_
。
对我来说,此命令在PMC中有效:
$env:DOTNET_ENVIRONMENT='YOUR_ENVIRONMENT'
我要感谢马丁·弗洛林(Martin Florin)和其他人为我指引正确的方向。