[英]Using a Singleton pattern to Linq to Sql Data Context
我对SQL的Linq感到有些困惑。我正在寻找数据上下文类有时给出以下异常的实际原因。
“已经有与此命令相关联的开放式数据读取器,必须先将其关闭
特别是在多任务环境中。大多数人说这是因为,Data Context不是线程安全的。所有人都建议将DataContex作为每个工作单元使用。
请参考以下主题以获得最佳答案
但是在我的情况下,我正在使用另一个以Singleton模式实现的类“ A”。此类的目的是,以Singleton方式提供Data上下文对象。我将此类“ A”的实例维护为派生的全局实例。类,并使用特定实例调用Datacontex。
我的问题是
我的方法调用会导致不受控制的内存增长吗? 根据我的理解,单例将一个实例作为静态对象。如果我的假设是错误的,请给我很好的解释。
注意:
无论如何,我的方法调用也会引发相同的异常。因此,我确定在这种情况下也会发生相同的问题。
您的方法通常会引起问题。 DataContext
不能是单例。 只是不要这样做。
即使A
是单身人士, DataContext
在A
内的适当方法内创建一个新的DataContext
,而不DataContext
作为A
内的变量。 (您可能还想首先考虑A
是否真的应该是单身人士。)
我之所以来到这里,是因为我觉得单例模式对于Linq Datacontext也是完美的。 但是在看到您的问题后,原因就变得如此。
这是我如何编写Singleton Linq DataContext的示例:
class DataAccess
{
private static DataContext db = null;
private DataAccess()
{
}
public static DataContext GetInstance()
{
return db ?? (db = new DataContext());
}
}
在单例模式中,将DataContext实例设置为静态。 好吧,在多线程环境中,静态对象将引起碰撞,例如您看到的错误。 您很幸运收到这些错误。 使用多个线程,您可以从另一个线程提交更改,然后让原始线程提交,从而导致混乱。
我会坚持使用非静态实现。 真的,我知道这很令人失望,我真的也想在这里使用这种模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.