我有一个项目,其中许多不同的类查询和修改一组公共表中的数据。我已经设置了一个.dbml文件,为我们提供了一个DataContext类。我的问题是所有对象是否应该使用单个DataContext实例,还是可以安全地使用多个实例。如果只有一个DataContext,我也想知道线程安全性是否存在,并且是否应该同步访问它的方法。
我有一个项目,其中许多不同的类查询和修改一组公共表中的数据。我已经设置了一个.dbml文件,为我们提供了一个DataContext类。我的问题是所有对象是否应该使用单个DataContext实例,还是可以安全地使用多个实例。如果只有一个DataContext,我也想知道线程安全性是否存在,并且是否应该同步访问它的方法。
我在每次事务中都使用一个新的DataContext实例。
重复使用旧实例会带来麻烦,而且会使DataContext的内容变得臃肿,因为任何曾经加载过的项目都必须被跟踪 - 应用程序会变得越来越慢,并且内存会不断膨胀。
如果您需要一个事务时间更长的项目,您可以通过克隆该项目将其与DataContext分离,并稍后使用Attach()重新附加到一个新的和全新的DataContext。
我甚至可以克隆一个项目,通过WCF发送它到网络上,在某个后续调用中取回它,将其附加到一个新的DataContext并保存更改(当然,我需要一个时间戳列)。
DataContext类非常轻量级,您可以反复实例化它。这在单个方法中访问实体对象时使事情变得更加简单。如果您需要从不同的类和方法访问相同的LINQ对象,并保持它们附加到DataContext以进行跟踪,那么保留一个单一实例也是可以的。
我一直听说应该使用单个DataContext实例。我通常在我的业务逻辑类中创建一个单例的DC实例,并将其用于所有的linq查询。
我相信这里的一些linq大师可能能够给出确切的原因,为什么你应该只有一个数据上下文类的实例...但我不是很确定。