2009-11-08 50 views
3

我似乎得到了很多这在我的LINQ的2 SQLLINQ:DataContext的生命和System.Data.SqlClient.SqlException:超时过期

System.Data.SqlClient.SqlException:超时过期。操作完成之前超时的时间或服务器没有响应。

真的没有理由,它是一个简单的查询,返回1条记录。

我想每个需要它的方法的使用语句中打开我的datacontext,我目前使用私有模块级变量打开的DataContext ..

是这个建议?

我不明白为什么它会超时,我只能认为我身边有太多的数据上下文....

任何想法?

回答

1

在DataContext被设计成当你使用它时被打开,然后被扔掉。例如:

using (var dc = new MyDataContext()) 
    dc.sp_DailyJob(); 

using块后立刻在DataContext被释放回连接池。

现在,如果您将DataContext缓存在本地模块中,它可能会暂时未使用。然后SQL Server最终会关闭你的连接,因为它闲置太久了。下一个呼叫将生成Timeout expired消息。

我想删除DataContext的缓存,并为每次运行的调用或查询创建一个新的DataContext。尽可能快地处理它们。这没有任何性能开销,因为连接被高度优化的连接池缓存。

+0

谢谢Andomar,正是我期待的,这是我的预期..但不确定..谢谢你的确认.. – 2009-11-08 16:24:32

2

这是一个很好的文章here(最佳实践和Linq中使用的DataContext到SQL的有效途径)约2 Linq的SQL数据方面的最佳实践...可能是值得一读:)

+0

感谢您的链接。 – 2009-11-08 16:23:56