无法通过.edmx文件

时间:2017-06-12 14:15:36

标签: sql-server entity-framework database-connection connection-string 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=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.MSSQLSERVER,{{1} },PCNAME.MSSQL13.MSSQLSERVERDOMAIN.MSSQLSERVER =&gt;不起作用
  • 验证SQL服务正在运行=&gt;他们是
  • 创建DOMAIN\PCNAME文件,连接到我的服务器,然后复制/粘贴生成的连接字符串:.udp =&gt;不起作用
  • 重新生成我的.edmx文件(和连接搅拌)=&gt;不起作用
  • 验证this suggestion =&gt;这已经是正确的

为什么所有连接向导似乎都能正常工作(SSMS, Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDB;Data Source=PCNAME文件,.udl生成器,我的数据库项目),而我的代码无法访问服务器?我没有改变任何代码行。

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

.edmx

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

1 个答案:

答案 0 :(得分:0)

在深入了解之前,让我们从一个有效的连接字符串开始,我刚刚使用Entity Framework 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开发人员版的默认实例(。的缩写)。我正在使用集成安全性和我的目标数据库名称(初始目录)是Tester。

如果实体框架(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”的项目,我没有带有连接字符串的app配置。它不会起作用。