实体框架+多线程+延迟加载

时间:2011-08-24 13:33:56

标签: multithreading entity-framework-4 lazy-loading

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

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

1 个答案:

答案 0 :(得分:10)

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

  • 每个线程的上下文
  • 单个上下文生成未经过代理的已分离实体(无延迟加载,无更改跟踪),并且每次访问该上下文时都会同步。

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