管理线程之间的ObjectContext生命周期

时间:2012-01-08 12:57:51

标签: .net multithreading entity-framework dispose

在多线程进程( Windows服务)中,主线程将EF查询(IQueryable<>)和页码(int)传递给子线程

每个子线程使用查询和页面获取数据,然后处理它。

我想我应该在需要时为每个线程创建一个新的ObjectContext。

还有其他建议吗?

有没有办法创建一个查询并稍后为它设置一个ObjectContext? - Moved to a new question

感谢。

2 个答案:

答案 0 :(得分:2)

每个线程使用新上下文并自行处理。上下文不是线程安全的,因此在并发线程之间共享它是一种灾难。如果您使用线程池,如果您无法控制线程生命周期,或者您想为多个后续处理重用线程,则必须自行处理它。

答案 1 :(得分:0)

这取决于您的应用是Web应用还是获胜应用。

但最好的解决方案是通过可以为您处理此问题的DI框架注入它。

例如,Ninject已预定义生命周期定义,例如InRequestScopeInThreadScopeInSingletonScope和....

它还可以防止连接和内存泄漏。