2011-08-24 88 views
8

我遇到了Entity Framework和多线程的问题,我想知道是否有解决方案保持延迟加载的能力。从我的理解,数据上下文不是线程安全的,这就是为什么当我有多个线程使用相同的数据上下文时,我得到各种数据读取器的错误。解决这个问题的方法是为每个到数据库的连接使用单独的数据上下文,然后销毁数据上下文。不幸的是,销毁我的数据上下文会阻止我进行延迟加载。实体框架+多线程+懒加载

有没有一种模式允许我在我的应用程序中拥有共享上下文,但仍能正确处理多个线程?

+0

将Parallel.ForEach与EF延迟加载结合使用时,我们遇到过类似的问题。 – tjrobinson

回答

9

不,没有这样的解决方案。您在多线程应用程序的选择是:每个线程

  • 语境
  • 单方面产生分离非代理实体(无延迟加载,没有变化追踪)为每个访问该上下文同步。

做代理连接实体的第二种方法是灾难的方式。它需要检测与上下文的所有隐藏交互,并使相关代码同步。您可能会以在多个切换线程中运行的单线程进程结束。

+0

+1,因为这在技术上是正确的,但是:即使只有一个线程,在整个应用程序中共享一个上下文也是个问题。背景应该是一个工作单位,而且是短暂的。 –

+0

@克雷格:这是正确的。我并不是指整个应用程序的一个上下文实例,而是一个处理单个“逻辑操作”的多个线程的上下文。如果实体必须分离,我不确定它是否仍然是工作单位。 –

+0

谢谢。这就是我想到的答案。 –