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

时间:2011-09-06 17:04:51

标签: c# asp.net linq-to-sql

在ASP.NET网站上,我使用LINQ to SQL来获取数据。此操作有点长(最长可达3秒),并且通常是用户第二次点击链接

  

已经有一个与此命令关联的开放DataReader   必须先关闭。

我查看了DataReader already open when using LINQ和其他类似的帖子,但我不明白如何处理/修复此问题。

我应该完全摆脱LINQ to 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();
            } 

2 个答案:

答案 0 :(得分:0)

我怀疑,其根本原因是DataContext不是线程安全的。不同的请求在不同的线程上运行。

不要在线程之间共享DataContext。在BeginRequest上启动一个并在EndRequest上关闭它 - 或者在需要时在本地创建一个,并将其包装在using语句中,以便在代码使用完毕后立即处理它。

答案 1 :(得分:0)

您可以通过在连接字符串中将Multiple Active Result Sets(MARS)设置为true来解决此问题。请注意,这可能表示N + 1连接问题,它实际上取决于查询。

string connectionString = "Data Source=MSSQL1;" + 
    "Initial Catalog=AdventureWorks;Integrated Security=SSPI" +
    "MultipleActiveResultSets=True";