2009-07-17 49 views
0

我们的应用程序遵循使用Rick Strahl在他的blog上概述的DataContextFactory类,包括修改Richard所提及的关键字(使用type.AssemblyQualifiedName)来维护每个Thread/HttpContext的DataContext的方法)。Scoped DataContext间歇性地引发了ExecuteReader错误

解决方案出现的声音(虽然在大多数情况下,不同的方法可能会更好),但是在使用这个我已经看到出现在应用间歇性错误:

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

回答

0

我们现在使用的是维持每笔交易datacontexts定制DataContextFactory的副本。唯一的另一个主要变化是使用[ThreadStatic]作为属性,而不是通过Thread.Get/SetData手动访问。

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