.NET 4.0实体框架超时已过期

时间:2011-02-07 22:17:16

标签: c# entity-framework-4 timeout

我正在使用MVC3,.NET framework 4.0和Entity Framework开发一个ASP.NET网站。当我运行应用程序并执行一个简单的选择SQL Server 2005数据库时,我收到以下错误:

“抛出了System.Data.SqlClient.SqlException:”超时已过期。操作完成之前经过的超时时间或服务器没有响应。“

这就是事情。我尝试登录并从管理工作室执行相同的查询,它工作。我使用.NET framework 4.0和实体框架开发了一个小型控制台应用程序,执行完全相同的查询,并返回了我需要的信息。我甚至从使用Entity框架切换到ADO.NET类(SqlConnection和SqlCommand),并且当从SqlCommand实例执行select时,我得到完全相同的错误。

当我使用实体框架创建模型时,我能够从向导连接到数据库,它工作正常。我创建的所有课程都没有任何问题。

请不要告诉我解决方案是增加任何超时,因为查询非常小(20条记录顶部),正如我之前所说的,当它从使用相同技术的控制台应用程序运行时工作正常,甚至相同代码我放在下面。

这是给我问题的代码:

MLIBEntities dbMLIB = new MLIBEntities();

var searchResults = (from s in dbMLIB.Sets
                     where s.setmap1.StartsWith(accountNumber)
                     select s);

return searchResults.ToList();

运行searchResults.ToList();

时抛出异常

这是实体类使用的连接字符串。我确定它使用了连接字符串,因为我修改了语法错误并且检测到它们。

<connectionStrings>
    <add name="MLIBEntities" connectionString="metadata=res://*/Models.MlibDBModel.csdl|res://*/Models.MlibDBModel.ssdl|res://*/Models.MlibDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=HERPADERP;Initial Catalog=MLIB;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=200&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

我猜这肯定是MVC Web应用程序中某处的配置问题,或者我只是遗漏了Web.config文件中的内容。有没有人有这个问题?我知道这很奇怪。

感谢您的帮助。我真的没有想法。

最后一件事。我运行了SQL分析器,似乎查询永远不会进入数据库服务器。任何想法为什么会发生这种情况?

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,另一个也出现了,与MSSQL无关。要解决第一个问题(运行查询花费的时间太长),我将command.CommandTimeout更改为使用更大的数字(默认值为30)。出现的另一个问题是当我使用计划任务来运行此应用程序时 - 20分钟后它会抛出错误

  

“线程被中止”

在查看日志错误后,发现应用程序池也有超时,默认值为20分钟。

答案 1 :(得分:2)

这可能会显示为超时,但可能只是一个安全问题。

我的第一直觉是你使用Windows身份验证(Integrated Security = True)进行连接,并且网站在一个帐户(网络服务?)下运行,该帐户没有该服务器的有效登录。

我的第二直觉是Sql Server在另一台机器上,并且存在防火墙问题。

第三直觉是Sql Server未配置为通过TCPIP接受网络连接。运行Sql Server配置管理器并确保它正在侦听。

答案 2 :(得分:0)

谢谢大家的帮助。看起来这个查询确实返回了大量的记录,并且当它从Web应用程序运行时导致超时,而它在控制台应用程序中没有发生它的性质。

再次感谢你!

答案 3 :(得分:0)

我已经在连接字符串中使用MultipleActiveResultSets = True超时,尝试将其关闭以查看是否存在问题