C# 在网站上使用Linq to SQL时出现异常。已经有一个开放的数据读取器

C# 在网站上使用Linq to SQL时出现异常。已经有一个开放的数据读取器,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,在ASP.NET网站上,我使用LINQ to SQL获取数据。此操作有点长(可能长达3秒),用户通常会第二次单击链接 已存在与此命令关联的打开的DataReader 必须先关闭它 我查看了和其他类似的线程,但不了解如何处理/修复此问题 我应该一起摆脱LINQ到SQL吗?处理这个问题的正确方法是什么 编辑: 我从Page_Load调用的代码 using (var wdc = new WebDataContext()) { // Expensi

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

已存在与此命令关联的打开的DataReader 必须先关闭它

我查看了和其他类似的线程,但不了解如何处理/修复此问题

我应该一起摆脱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();
            } 

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


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

您可以通过在connectionstring中将其设置为true来修复此问题。请注意,这可能表示存在N+1连接问题,这实际上取决于查询

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

处理此问题的正确方法是创建一小段代码来重现问题,然后在此处发布该代码。您如何处理项目中的DB连接?请向我们展示您的代码,特别是与连接对象相关的代码。添加代码以显示我如何使用contextDon’甚至不为每个请求创建一个,而是为每个事务创建一个。如果对象A的属性是对象B的集合,您将其全部删除并保存到数据库中,如果您使用相同的DataContext获取对象A的另一个副本,那么它不会返回到数据库,它只会给您相同的对象A,其中集合中充满了对象B。