大概這些是一個問題,我使用一個EF上下文每個請求,但我想每個線程使用一個,因爲我要在請求期間在另一個線程中做一些複雜的任務。每個線程使用一個實體框架上下文是否安全? ...是的?怎麼樣?
那麼,安全嗎?如果答案是肯定的,該怎麼辦?如何在線程中存儲對象並讓它們返回?
預先感謝您。
大概這些是一個問題,我使用一個EF上下文每個請求,但我想每個線程使用一個,因爲我要在請求期間在另一個線程中做一些複雜的任務。每個線程使用一個實體框架上下文是否安全? ...是的?怎麼樣?
那麼,安全嗎?如果答案是肯定的,該怎麼辦?如何在線程中存儲對象並讓它們返回?
預先感謝您。
只有完全控制線程纔是安全的。這意味着你必須創建線程和線程必須完成工作後死亡。如果使用線程池查詢工作,則不得使用每個線程的上下文。線程池用於例如用於ASP.NET,ASP.NET MVC或WCF請求的線程。上下文不是線程安全的,因此不要在線程間共享。
要存儲每個線程的內容,請使用static
變量並將其標記爲ThreadStaticAttribute
。
我會將EF上下文的範圍限制在請求級別上的特定工作單元。
如果您的工作單元與請求無關,您可以爲此創建一個新線程並使用新的EF上下文,請在該工作單元完成後立即處理它。請注意,儘管EF上下文不是線程安全的,即不能在多個線程中使用相同的上下文。
請在這裏看到評論... http://stackoverflow.com/questions/5414076/ef4-objectcontext-lifetime/5414475#5414475 – JTew 2011-03-30 22:57:57