我似乎在我的Linq 2 SQL中获得了很多这个
System.Data.SqlClient.SqlException:超时已过期。操作完成之前经过的超时时间或服务器没有响应。
实际上没有理由,它是一个返回1条记录的简单查询。
我正在考虑在每个需要它的方法的Using语句中打开我的datacontext,我当前正在使用私有模块级变量来打开datacontext ..
这是推荐的吗?
我不明白为什么它会超时,我只能认为我有太多的数据背景......
有什么想法吗?
答案 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。尽快处理它们。这没有性能开销,因为连接是由高度优化的连接池缓存的。