ef核心在更新数据库期间不使用ASPNETCORE_ENVIRONMENT

时间:2017-08-25 12:06:49

标签: c# .net-core visual-studio-2017 entity-framework-core

我使用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启动应用程序,它可以工作但不使用包管理器控制台。

5 个答案:

答案 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中使用包管理器对我来说是一个死胡同。 解决方案是:

  1. 在解决方案的初始项目中的.csproj中添加以下内容:

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    </ItemGroup>
    
  2. 打开命令工具(cmd),然后转到与.csproj相同的文件夹,找到启动项目(默认项目)。

  3. 运行命令为Anton Toshik建议set ASPNETCORE_ENVIRONMENT=Production

  4. 4.然后运行命令dotnet ef database update initMigrationProduct -c ProductContext现在它可以正常工作。

    备注:此命令databaseupdate自早期版本以来已更改位置。并且没有用于迁移的参数/代码。在澄清之后,文档会解释更多:
    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)和其他人为我指引正确的方向。