【发布时间】: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