Scoped DataContext间歇性地引发ExecuteReader错误

时间:2009-07-17 15:31:53

标签: c# multithreading linq-to-sql datacontext

我们的应用程序遵循每个Thread / HttpContext维护DataContext的方法,使用Rick Strahl在他的blog上概述的DataContextFactory类,包括Richard提到的Key的修正(使用type.AssemblyQualifiedName)。

解决方案看起来很合理(尽管在大多数情况下,不同的方法可能会更好)但是在使用此方法时我看到应用程序中出现了间歇性错误:

  

ExecuteReader需要打开和   可用连接。连接   目前的州已经关闭。

我使用下面的属性访问整个代码中的datacontext,这是我的DataContext类的一部分:

/// <summary>
/// Returns the current datacontext for the thread or HttpContext, creating one if it does not exist.
/// </summary>
public static SharedDataContext Current
{
    get
    {
        return DataContextFactory.GetScopedDataContext<SharedDataContext>();
    }
}

间歇性我很难把它固定下来。有谁知道我可能做错了什么,或者知道我怎么能调试这个问题?


请注意,这可能是未答复的问题here

的副本

1 个答案:

答案 0 :(得分:0)

我们现在使用自定义DataContextFactory来维护每个事务的datacontexts。唯一的另一个主要变化是使用[ThreadStatic]作为属性,而不是通过Thread.Get / SetData手动访问

由于这种改变似乎不再出现问题,并且由于没有提出其他答案,我建议将[ThreadStatic]作为解决方案