【问题标题】:dotnet ef does not respect configurationdotnet ef 不尊重配置
【发布时间】:2019-03-10 22:16:44
【问题描述】:

我有两种配置: - 发展 - 生产

使用以下 json 设置文件: - appsettings.Production.json - appsettings.Development.json

在每个设置文件中,我都有以下部分:

(生产)

"Sql" : {
    "Name": "App_Prod",
    "Server": "127.0.0.1",
    "Port": 0,
    "Database": "db_prod",
    "Username": "user_prod",
    "Password": "secret"
   },

(开发)

"Sql" : {
    "Name": "App_Dev",
    "Server": "127.0.0.1",
    "Port": 0,
    "Database": "db_dev",
    "Username": "user_dev",
    "Password": "secret"
   },

我将这些注入到我的 DbContext 构造函数中,它可以正常工作。 我使用迁移系统使用愚蠢的命令更新了我的数据库:

dotnet ef 数据库更新--context MyDbContext--配置开发

成功了,我的数据库方案已经更新。

但是当我尝试使用以下命令更新我的生产数据库时:

dotnet ef 数据库更新--context MyDbContext--配置生产

它告诉我不需要应用任何迁移。

我在 MyDbContext 中转储了连接字符串,我可以看到 DbContext 仍然使用开发配置,即使我键入它应该使用生产设置文件。

为什么迁移机制不尊重我的配置? 如何使用 appsettings.Production 运行 dotnet ef?

【问题讨论】:

  • 我会使用 env var 来提供连接字符串,而不是 appsettings.Production.json。如果您使用配置文件,afaik 您必须在执行 dotnet cli 命令之前设置环境名称,如此处所述docs.microsoft.com/en-us/aspnet/core/fundamentals/…(--configuration != 环境名称)。设置 ASPNETCORE_ENVIRONMENT=Production
  • 我之前尝试过使用你的解决方案,但有任何结果。它是有线的,因为当我尝试应用迁移时,构建过程会创建仅包含生产设置的生产目录。
  • 您似乎将调试/生产构建配置与不同的环境混为一谈。第一个是“它是如何编译的”,但环境是关于设置的。这意味着,您可以创建一个生产版本并使用开发设置运行它,以及一个调试版本并使用生产设置运行它。
  • @ChristophLütjen 说了什么。事实上,ASP.NET Core 在技术上根本没有利用 Visual Studio 中的配置。与旧版本的 ASP.NET 中针对特定配置环境进行编译不同,配置环境是通过设置指定的,通常通过环境变量 ASPNETCORE_ENVIRONMENT。

标签: c# asp.net-core entity-framework-core


【解决方案1】:

--configuration 用于构建配置(例如ReleaseDebug

v2.0 之前的版本:

使用-e--environment

PM> dotnet ef 数据库更新 --context MyDbContext -e Production

v2.0+:

在执行命令前设置 ASPNETCORE_ENVIRONMENT 环境变量:

PM> $env:ASPNETCORE_ENVIRONMENT='生产'

【讨论】:

  • .net core 2.1 中没有 -e 或 --environment 开关。只有--配置
  • 看起来 v2+ 已删除(为什么??);答案已更新
【解决方案2】:

在我的情况下(Linux 环境)使用:

export ASPNETCORE_ENVVIRONMENT=开发

更改数据库更新命令使用的环境

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2013-10-01
    • 1970-01-01
    • 2017-12-10
    相关资源
    最近更新 更多