每个线程使用一个实体框架上下文是否安全? ......是的?怎么样?

时间:2011-03-30 20:21:21

标签: asp.net multithreading entity-framework

这可能是两个问题,我在每个请求中使用一个EF上下文,但我想在每个线程中使用一个,因为我将在请求期间在另一个线程中创建一些复杂的任务。

那么,这样安全吗?如果答案是肯定的,怎么做?如何在线程中存储对象并将其取回?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

只有完全控制线程才安全。这意味着你必须创建线程,线程必须在完成工作后死亡。如果使用线程池来查询工作,则不得使用每个线程的上下文。线程池用于例如服务ASP.NET,ASP.NET MVC或WCF请求的线程。 Context不是线程安全的,所以不要在线程之间共享它。

要为每个帖子存储内容,请使用static变量并将其标记为ThreadStaticAttribute

答案 1 :(得分:1)

我会将EF上下文的范围限制为特定的工作单元在请求级别

如果您的工作单元通过各种方式与请求无关,则可以为此生成新线程并使用新的EF上下文,只需在完成该工作单元后将其丢弃即可。请注意,EF上下文不是线程安全的,即您不能在多个线程中使用相同的上下文。