EF以某种方式连接到错误的SQL Server实例,即使连接字符串说它是正确的?

时间:2014-02-12 09:28:01

标签: sql-server entity-framework-6

情景:

  • 具有2个实例的单个SQL Server - > .\test& .\live
  • 具有2个网站的单个IIS服务器 - > test& live

test网站web.config指向.\test SQL服务器实例,live网站指向.\live。 SQL Server实例在各方面都是相同的,即数据库名称,SQL用户名/密码等。它们不同的唯一方法是通过它们监听的端口。

我们将以下代码部署到test网站:

_logger.Debug("connection string: " + _context.Database.Connection.ConnectionString);

_context.Database.ExecuteSqlCommand("stored_procedure @param");

在执行此代码后检查日志文件时,它会按预期显示连接字符串指向.\test实例。但是,SQL事件探查器跟踪显示正在针对stored_procedure实例执行.\live

我们无法弄清楚为什么或如何发生这种情况,有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

难题的缺失部分是端口。根据{{​​3}}上的注释,MSSQL端口和实例是相同的......并且端口覆盖实例名称(如果已指定)

我们的连接字符串如下所示:

testData Source=server\test,7777;Initial Catalog=ourdb;Persist Security Info=True;User ID=user;Password=pass
liveData Source=server\live,7777;Initial Catalog=ourdb;Persist Security Info=True;User ID=user;Password=pass

因此,虽然他们指向不同的实例,但同样的端口覆盖了它并强制它们有效地指向端口7777上运行的任何内容 - 即.\live实例,因此我们经历的异常行为。