无法连接到SQL Server 2016 LocalDB

时间:2018-09-03 04:15:25

标签: sql-server asp.net-core-2.1

我已经设置了本地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")));

1 个答案:

答案 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.jsonappsettings.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-->"