我已经设置了本地Sql Server并正在运行。我还可以连接到它并在Visual Studio中运行查询。但是,当我向使用此数据库的.net核心API发出POSTMAN请求时(该数据库和api都位于同一台计算机的本地主机上),我会收到错误消息:
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware:执行请求时发生未处理的异常。
System.Data.SqlClient.SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:SQL网络接口,错误:50-发生本地数据库运行时错误。指定的LocalDB实例名称无效。
但是,如果我尝试使用sqlcmd -s "(localdb)\MSSQLLocalDB"
,它可以正常工作并且可以连接。
有关设置的更多信息如下:
命令sqllocaldb i MSSQLLocalDB
的结果是
Name: mssqllocaldb
Version: 13.1.4001.0
Shared name:
Owner: MyDomain\My.User
Auto-create: Yes
State: Running
Last start time: 9/3/2018 xx:xx:xx xx
Instance pipe name: np:\\.\pipe\LOCALDB#2690D11D\tsql\query
连接字符串:
{
"ConnectionStrings": {
"ModelA": "server=(localdb)\\MSSQLLocalDB;Initial Catalog=ModelA.Test.DB;Trusted_Connection=True;",
"ModelB": "server=(localdb)\\MSSQLLocalDB;Initial Catalog=ModelB.Test.DB;Trusted_Connection=True;"
}
}
StartUp.cs配置服务:
services.AddDbContext<ModelAContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("ModelA")));
services.AddDbContext<ModelBContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("ModelB"), b => b.MigrationsAssembly("Migrations.Project")));
答案 0 :(得分:1)
请确保您的appsettings.json
是唯一具有 ConnectionStrings 部分的配置,因为appsettings.Development.json
可以覆盖它。为了进行测试,我会尝试对其进行硬编码,您也可以尝试使用其他连接字符串格式,例如:
services.AddDbContext<ModelAContext>(options => options.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Integrated Security=True;Database=ModelA.Test.DB"));
编辑:如果您希望能够使用基于环境的连接字符串,则应该始终只在appsettings.json
或appsettings.Development.json
中使用开发连接字符串,因此您的生产凭证不要通过源代码控制泄漏。您可以通过在类似[p>
"ConnectionStrings": {
"Development": <--your connection string for localhost development-->
},
现在,如果要为远程数据库添加生产连接字符串,请在Visual Studio中右键单击您的 ASP.NET Core网站项目>管理用户秘密。这将在secrets.json
中生成并打开%APPDATA%\Microsoft\UserSecrets\
文件。在其中插入“生产”连接字符串。
{
"ConnectionStrings": {
"Production": <!--your connection string for remote server-->
}
}
然后您可以通过环境变量加载正确的连接字符串。
configuration.GetConnectionString(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))
现在,如果要临时将上下文切换到生产数据库,则可以打开Package Manager控制台并键入:
$Env:ASPNETCORE_ENVIRONMENT = "Production"
现在只剩下在远程服务器上设置连接字符串了,因为secrets.json
不会发布,并且连接字符串很可能在远程服务器上有所不同。再次使用环境变量 ConnectionStrings__Production :
Environment="ASPNETCORE_ENVIRONMENT=Production" "ConnectionStrings__Production=<--your connection string from remote server to a database-->"