在网站上使用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();
            } 

在网站上使用Linq to SQL时出现异常.已经有了开放的数据阅读器

您可以通过在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语句中,这样当你的代码完成使用它时,它就会立即被处理掉。