[英]Unable to connect to SQL Server 2016 LocalDB
我已經設置了本地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 Config服務:
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")));
確保您的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
始終只有開發連接字符串,這樣您的生產憑據不會通過源代碼控制泄漏。 您可以通過在類似以下環境下命名來簡化它
"ConnectionStrings": {
"Development": <--your connection string for localhost development-->
},
現在,如果要為遠程數據庫添加生產連接字符串,請在Visual Studio>管理用戶秘密中 ,右鍵單擊ASP.NET Core網站項目 。 這將在%APPDATA%\\Microsoft\\UserSecrets\\
生成並打開secrets.json
文件。 在其中插入“生產”連接字符串。
{
"ConnectionStrings": {
"Production": <!--your connection string for remote server-->
}
}
然后,您可以通過環境變量加載正確的連接字符串。
configuration.GetConnectionString(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"))
現在,如果要臨時將上下文切換到生產數據庫,則可以打開“程序包管理器控制台”並鍵入:
$Env:ASPNETCORE_ENVIRONMENT = "Production"
現在只剩下在遠程服務器上設置連接字符串了,因為secrets.json
不會發布,並且連接字符串很可能在遠程服務器上有所不同。 使用環境變量ConnectionStrings__Production再次完成此操作:
Environment="ASPNETCORE_ENVIRONMENT=Production" "ConnectionStrings__Production=<--your connection string from remote server to a database-->"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.