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

问题描述 投票:0回答:6

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

c# .net-core visual-studio-2017 entity-framework-core
6个回答
202
投票

要在 Visual Studio 内的包管理器控制台 (PMC) 中将 ASPNETCORE_ENVIRONMENT 变量设置为生产,请首先使用此命令

$env:ASPNETCORE_ENVIRONMENT='Production'

然后就可以使用了

Update-Database

通常。


35
投票

从 EF Core 5.0 开始,还可以使用 --environment 参数提供环境,但您还需要在之前指定“--”标记:

dotnet ef database update -- --environment Production

正如文档所述:

-- 标记指示 dotnet ef 将后面的所有内容视为 参数而不是尝试将它们解析为选项。任何额外的参数都不是 dotnet ef 使用的内容会转发到应用程序


13
投票

我和这个问题的记者有同样的问题,并在包管理器控制台(PMC)中尝试了最近的解决方案,并使用以下命令设置环境变量:

$env:ASPNETCORE_ENVIRONMENT='YOUR_ENVIRONMENT'

不幸的是,我有一个 ConsoleApplication,并在启动时使用通用主机构建器

Host.CreateDefaultBuilder()
。在这种情况下,环境变量前缀不是
ASPNETCORE_
而是
DOTNET_

对我来说,这个命令在 PMC 中有效:

$env:DOTNET_ENVIRONMENT='YOUR_ENVIRONMENT'

我要感谢 Martin Florin 和其他人引导我走向正确的方向。


3
投票

您可以在命令行/终端中使用以下命令来设置环境变量。

$env:ASPNETCORE_ENVIRONMENT = 'Development'
dotnet ef migrations add newMigrationTest

3
投票

根据EntityFrameworkCore#6846,正确的解决方案是使用

--environment
选项,
dotnet ef
命令不尊重
ASPNETCORE_ENVIRONMENT

dotnet ef database update -- --environment Production

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.然后运行命令

dotnet ef database update initMigrationProduct -c ProductContext
现在就可以了。

备注:在此命令中,

database
update
自早期版本以来已更改位置。并且没有用于迁移的参数/代码。文档在此澄清后进行了更多解释:
https://learn.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet

© www.soinside.com 2019 - 2024. All rights reserved.