在网站上使用Linq to SQL时出现异常.已经有了开放的数据阅读器
本文关键字:数据 异常 网站 Linq to SQL | 更新日期: 2023-09-27 18:07:59
. NET网站我用LINQ到SQL来获取数据。这个操作有些长(最多可达3秒),而且经常需要用户第二次点击链接
已经有一个与此命令相关联的打开的数据读取器必须先关闭
我看着DataReader已经打开时使用LINQ和其他类似的线程,但我不明白如何处理/修复这个
我应该一起摆脱LINQ到SQL吗?什么才是正确的处理方式?
编辑:我从Page_Load 调用的代码
using (var wdc = new WebDataContext())
{
// Expensive operation, increase timeout
wdc.CommandTimeout = 120;
// First need to update data for this customer
wdc.Web_WrkTrackShipment_Update((int)this.Parent.ProviderUserKey, sessionId);
// Return set of this data based on parameters.
return wdc.Web_WrkTrackShipment_Load(sessionId, pageNo, pageSize, searchCriteria, dateFrom, dateTo, ref pageCount_Null).ToList();
}
您可以通过在connectionstring中将Multiple Active Result Sets(MARS)设置为true来解决这个问题。注意,这可能表示N+1连接问题,这实际上取决于查询。
string connectionString = "Data Source=MSSQL1;" +
"Initial Catalog=AdventureWorks;Integrated Security=SSPI" +
"MultipleActiveResultSets=True";
我怀疑,根本原因是DataContext不是线程安全的。不同的请求在不同的线程上运行。
不要在线程之间共享你的DataContext。要么在BeginRequest上启动一个,在EndRequest上关闭它,要么在你需要的时候在本地创建一个,并把它包装在using
语句中,这样当你的代码完成使用它时,它就会立即被处理掉。