无法通过 .edmx 文件生成的连接字符串连接 SQL Server 2016 开发人员



我正在使用SQL Server 2008 Express进行一个项目。我有一个名为SQLEXPRESS的实例,我曾经通过这个连接字符串连接到数据库:

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

此连接字符串由.edmx文件生成(我正在处理一个 ASP.NET MVC 项目、数据库优先和实体框架),并且工作正常。

我最近安装了带有开发人员许可证SQL Server 2016。在安装过程中,我使用了默认实例,即MSSQLSERVER.有关信息,生成的实例 IDMSSQL13.MSSQLSERVER

我的解决方案中有一个 SQL 项目,用于在我的新 SQL Server 上重新生成我的表;我可以通过向导轻松连接到服务器。

我还使用 SQL Server Management Studio 来验证服务器上一切正常,并且运行良好(生成表,连接正常)。

但是,我的代码无法连接到服务器,并且系统地失败了第一次调用,出现错误 26 - 找不到服务器实例

这是我到目前为止尝试过的:

  • 将连接字符串的data source参数更改为localhost..MSSQLSERVER.PCNAMEPCNAME.MSSQLSERVERPCNAME.MSSQL13.MSSQLSERVERDOMAIN.MSSQLSERVERDOMAINPCNAME=>
  • 不起作用
  • 验证 SQL 服务是否正在运行 => 它们是
  • 创建一个.udp文件,连接到我的服务器,然后复制/粘贴生成的连接字符串:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDB;Data Source=PCNAME=>
  • 不起作用
  • 重新生成我的 .edmx 文件(和连接 stirng)=> 不起作用
  • 验证此建议=>它已经是正确的

为什么所有连接向导似乎都有效(SSMS,.udl文件,.edmx生成器,我的数据库项目),而我的代码无法访问服务器?我没有更改任何代码行。

编辑:疯狂的是我在同一台服务器上有一个日志数据库,连接字符串是

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

它实际上是在记录网络错误!那么它真的是连接字符串错误还是EF错误?我正在使用最新的 EF 版本,每个引用 EF 的项目上的 6.1.3(主层和 DAL 层)

在深入探讨它可能是什么之前,让我们从我刚刚在具有实体框架 6.1.3 的 Visual Studio 2017 Enterprise 上的本地计算机上测试的工作连接字符串开始。

<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 开发人员版的默认实例(. 是此版本的缩写)。 我正在使用集成安全性,我的目标是我的数据库名称(初始目录)是测试人员。

如果实体框架 (EF) 未正确达到目标,则需要考虑一些事项。

  1. 您使用的是哪个版本的 EF? 在 MS 迁移到 Core 之前,我相信 EF 的最后一个 .NET 完整版是 6.1.3。 确保您使用的是 Nuget 下载的最新版本。
  2. 如果你从Express到一个成熟的SQL,我相信连接字符串的"提供者"通常不会相同。 或者它可能是安装 sql 之前的本地默认实例是不同的。 确保不要用它覆盖现有连接字符串。 提供程序应为:"provider=System.Data.SqlClient">
  3. 您正在另一个项目中引用 EF 的项目。 引用 EF 的每个项目都应具有 EF 的 NuGet 包以及包含连接字符串的配置文件。 EG:我有一个控制台项目,用于测试我编写的内容,并引用另一个名为"EF Testing"的项目,但我没有带有连接字符串的应用配置。 这是行不通的。

最新更新