我正在尝试从现有数据库反向创建 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));
但是没有效果。
知道发生了什么吗?
谢谢
您在
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'"