Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# dotnet ef不尊重配置_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# dotnet ef不尊重配置

C# dotnet ef不尊重配置,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我有两种配置: -发展 -生产 使用以下json设置文件: -appsettings.Production.json -appsettings.Development.json 在每个设置文件中,我都有以下部分: (制作) (发展) 我将这些注入到我的DbContext构造函数中,它工作正常。 我使用以下命令使用迁移系统更新了数据库: dotnet ef数据库更新--上下文MyDbContext--配置开发 "Sql" : { "Name": "App_Dev", "Server

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

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

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

(制作)

(发展)

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

dotnet ef数据库更新--上下文MyDbContext--配置开发

"Sql" : {
    "Name": "App_Dev",
    "Server": "127.0.0.1",
    "Port": 0,
    "Database": "db_dev",
    "Username": "user_dev",
    "Password": "secret"
   },
它成功了,我的数据库方案也得到了更新

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

dotnet ef数据库更新--上下文MyDbContext--配置生产

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

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

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

--配置
用于构建配置(例如
发布
调试

v2.0之前的版本:

使用
-e
-environment

PM>dotnet ef数据库更新——上下文MyDbContext-e产品

v2.0+:

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

PM>$env:ASPNETCORE_ENVIRONMENT='Production'

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

导出ASPNETCORE\u environment=Development

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

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

我将使用env var来提供连接字符串,而不是appsettings.Production.json。如果使用配置文件,那么在执行dotnet cli命令之前,您必须设置环境名称,如下所述(--configuration!=environment name)。Set ASPNETCORE_ENVIRONMENT=production我以前尝试过使用您的解决方案,但没有结果。这是因为,当我尝试应用迁移时,构建过程只使用生产设置创建生产目录。似乎您将调试/生产构建配置与不同的环境混为一谈。第一个是“如何编译”,但环境是关于设置的。这意味着,您可以创建一个生产构建并使用开发设置运行它,调试构建并使用生产设置运行它。事实上,ASP.NET核心在技术上根本没有利用Visual Studio中的配置。与在旧版本的ASP.NET中编译特定配置环境不同,配置环境是通过设置指定的,通常是通过环境变量ASPNETCORE_environment指定的。在.NET core 2.1中没有-e或--environment开关。仅限--configuration看起来像是针对v2+删除的(为什么??);最新答案