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

ctr*_*373 9 multithreading lazy-loading entity-framework-4

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

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

Lad*_*nka 10

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

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

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