LINQ:DataContext Life和System.Data.SqlClient.SqlException:超时已过期

时间:2009-11-08 10:47:07

标签: sql-server linq linq-to-sql timeout

我似乎在我的Linq 2 SQL中获得了很多这个

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

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

我正在考虑在每个需要它的方法的Using语句中打开我的datacontext,我当前正在使用私有模块级变量来打开datacontext ..

这是推荐的吗?

我不明白为什么它会超时,我只能认为我有太多的数据背景......

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

有一篇很好的文章here (在Linq to SQL中使用DataContext的最佳实践和有效方法)关于Linq 2 SQL数据上下文的最佳实践...可能值得一读:)

答案 1 :(得分:1)

datacontext设计为在您使用时打开,然后丢弃。例如:

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

using块之后,datacontext将被释放回连接池。

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

我将删除DataContext的缓存,并为您运行的每个调用或查询继续创建一个新的DataContext。尽快处理它们。这没有性能开销,因为连接是由高度优化的连接池缓存的。