-1

我正在使用SQL Server 2008 Express進行項目工作。我叫SQLEXPRESS一個實例,我用通過該聯接字符串連接到數據庫:無法通過.edmx文件生成的連接字符串連接SQL Server 2016 Developer

<add name="MyConn" connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient; 
provider connection string=&quot;data source=PCNAME\SQLEXPRESS;initial catalog=DbName;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

.edmx文件(我的工作產生上的ASP.NET MVC項目,該數據庫連接字符串第一,和實體框架),它工作得很好。

我最近安裝了SQL Server 2016開發人員許可證。在安裝過程中,我使用了默認實例,即MSSQLSERVER。有關信息,生成的InstanceID是MSSQL13.MSSQLSERVER

我在我的解決方案中有一個SQL項目來重新生成我的新SQL Server上的表;我可以通過嚮導輕鬆連接到服務器。

我還使用SQL Server Management Studio來驗證服務器上的一切正常,它完美地工作(生成表,連接正常)。

然而,我的代碼是無法連接到服務器,系統未能在第一次調用與error 26 - can't locate server instance

這是我到目前爲止已經試過:

  • 變化的的data source參數聯接字符串localhost..\MSSQLSERVER.\PCNAMEPCNAME.MSSQLSERVERPCNAME.MSSQL13.MSSQLSERVERDOMAIN.MSSQLSERVERDOMAIN\PCNAME =>不行的
  • 驗證SQL服務正在運行=>他們是
  • 創建.udp文件,連接到我的服務器,複製/粘貼生成的連接字符串:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDB;Data Source=PCNAME =>不行的
  • 重生我的.edmx文件(和連接stirng)=>不行的
  • 驗證this suggestion =>這是已經是正確的

爲什麼所有的連接嚮導似乎工作(SSMS, .udl文件,.edmx發生器,我的DB計劃)而我的代碼無法達到服務器?我沒有更改任何代碼行。

編輯:瘋狂的事情是我有相同的服務器上的日誌數據庫,了連接字符串是

<add name="NLogConn" connectionString="Data Source=localhost;initial catalog=DBLOG;integrated security=True" providerName="System.Data.SqlClient" /> 

而且它實際登錄的網絡錯誤!那麼它真的是連接字符串錯誤還是EF錯誤?我在每個引用EF的項目上使用最新的EF版本6.1.3(主圖層和DAL圖層)

回答

0

在深入探討可能的原因之前,讓我們從一個工作連接字符串開始,在本地機器上使用Visual Studio 2017 Enterprise with Entity Framework 6.1.3。

<connectionStrings> 
    <add name="TesterEntities" connectionString="metadata=res://*/Tester.csdl|res://*/Tester.ssdl|res://*/Tester.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Tester;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

此標記的連接字符串是:

=&quot;data source=.;initial catalog=Tester;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot; 

對於我的測試方面,我用我的本地服務器的默認實例也是2016開發版(英文縮寫是這個)。我正在使用集成安全性,我的數據庫名稱(初始目錄)是Tester。

如果實體框架(EF)未正確擊中目標,有幾件事需要考慮。

  1. 您使用的是什麼版本的EF?在MS轉移到Core之前,我相信EF的最後一個.NET完整版是6.1.3。確保您使用的是Nuget下載的最新版本。
  2. 如果您從Express轉換爲完整的SQL,連接字符串的'provider'通常不會與我相信的一樣。或者它可能是安裝sql之前的本地默認實例。確保你不用這個覆蓋現有的連接字符串。提供者應該是:'provider = System.Data.SqlClient'
  3. 您正在引用另一個項目中的EF項目。每個引用EF的項目都應該具有EF的NuGet包以及包含連接字符串的配置文件。 EG:我有一個控制檯項目用於測試我編寫的東西,並引用另一個名爲「EF Testing」的項目,而且我沒有帶連接字符串的應用程序配置。它不會工作。
+0

1 - 我使用EF 6.1.3,最新版本。 2 - 糾正我,如果我錯了,但如果我使用EF,我想我必須使用System.Data.EntityClient作爲提供程序? 3 - 每個引用EF的項目都有自己的配置文件(只有我的主項目和DAL),並且我在每個連接字符串都是相同的地方進行了驗證。另外,我對原始文章進行了編輯 – user2687153

+0

您在示例中給出的連接字符串不是EF連接字符串。您需要所有元數據:'metadata = res://*/Tester.csdl..etc'來顯示此連接字符串正在引用EF生成的文件。 – djangojazz

+0

我在第一個給MyConn的地方複製/粘貼了所有的'metadata = res://'(這似乎不起作用)。另一個確實不是由EF生成的,也不需要這些元數據。 – user2687153