Scaffold-DbContext 与 appsettings.json 中的 ConnectionString 时出错,但如果手动指定相同的连接字符串则有效

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

我正在尝试从现有数据库反向创建 C# 代码。

如果我手动输入连接字符串并键入命令:

Scaffold-DbContext 'Data Source=MyServer;Initial Catalog=MyCatalog;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False'    
         Microsoft.EntityFrameworkCore.SqlServer 
         -Tables DeviceParameterWithDevice -Context DPWDContext  
         -OutputDir Models -Force

这工作正常,我得到了生成的所有正确代码。

我将相同的连接字符串添加到

appsettings.json
文件中(以及
appsettings.Development.json
文件 - 以防万一)

{
  "ConnectionStrings": {
    "EnviroWatchDB": "Data Source=MyServer;Initial Catalog=MyCatalog;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False'     Microsoft.EntityFrameworkCore.SqlServer -Tables DeviceParameterWithDevice -Context DPWDContext  -OutputDir Models -Force"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

如果我跑步

Scaffold-DbContext -connection name=EnviroWatchDB     
         Microsoft.EntityFrameworkCore.SqlServer 
         -Tables DeviceParameterWithDevice -Context DPWDContext  
         -OutputDir Models

我收到以下错误

未处理的异常。未处理的异常。未处理的异常。 System.UriFormatException:无效的 URI:无法解析主机名。

在System.Uri.CreateThis(字符串uri,布尔dontEscape,UriKind uriKind,UriCreationOptions&creationOptions)
在 System.Uri..ctor(String uriString, UriKind uriKind)
在 System.Net.Http.HttpClient.CreateUri(字符串 uri)
在 System.Net.Http.HttpClient.GetAsync(字符串 requestUri)
在 Program.<>c__DisplayClass0_2.<<$>b__1>d.MoveNext() 位于 Z:\MyDir\Program.cs:第 111 行
--- 先前位置的堆栈跟踪结束 ---
在 System.Threading.Tasks.Task.<>c.b__128_1(对象状态)
在 System.Threading.QueueUserWorkItemCallback.Execute()
在 System.Threading.ThreadPoolWorkQueue.Dispatch()
在 System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() System.UriFormatException:无效的 URI:无法解析主机名。
在System.Uri.CreateThis(字符串uri,布尔dontEscape,UriKind uriKind,UriCreationOptions&creationOptions)
在 System.Uri..ctor(String uriString, UriKind uriKind)
在 System.Net.Http.HttpClient.CreateUri(字符串 uri)
在 System.Net.Http.HttpClient.GetAsync(字符串 requestUri)
在 Program.<>c__DisplayClass0_2.<<$>b__1>d.MoveNext() 在 Z:\MyDirProgram.cs:第 111 行
--- 先前位置的堆栈跟踪结束 ---
在 System.Threading.Tasks.Task.<>c.b__128_1(对象状态)
在 System.Threading.QueueUserWorkItemCallback.Execute()
在 System.Threading.ThreadPoolWorkQueue.Dispatch()
在 System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() System.UriFormatException:无效的 URI:无法解析主机名。

我尝试将其添加到

program.cs
文件中

var connectionString = builder.Configuration.GetConnectionString("EnviroWatchDB");
builder.Services.AddDbContext<DbContext>(x => x.UseSqlServer(connectionString));

但是没有效果。

知道发生了什么吗?

谢谢

sql connection-string dbcontext scaffold
1个回答
0
投票

您在

appsettings.json
中的连接字符串根本无效 - 您也为
Scaffold-DbContext
命令包含了一半的命令行参数....

"Data Source=MyServer;Initial Catalog=MyCatalog;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False'     Microsoft.EntityFrameworkCore.SqlServer -Tables DeviceParameterWithDevice -Context DPWDContext  -OutputDir Models -Force"

您需要将其更改为:

"Data Source=MyServer;Initial Catalog=MyCatalog;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False'"
© www.soinside.com 2019 - 2024. All rights reserved.