

但選擇使用了ContainerControlledLifetimeManager對象生命周期管理器,其将每個對象存儲為Singleton。這導緻在多線程環境下會産生異常。
例如我們嘗試在多線程條件下更新Customer表:


此時,我們考慮一種新的方法,引入線程Scope功能,即在給定線程中,使用同一個UnityContainer來維護對象,這樣間接利用的EntityFramework的上下文功能。
原理很簡單,就是為每個線程生成一個單獨的ChildUnityContainer。


這裡同時需要一個UnityContainerDispatcher來負責為線程生成Container容器。


此時,我們的代碼修改為,


建立多線程測試代碼,


測試結果表明已經可以安全的在多線程條件下工作了。
EntityFramework用法探索系列
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_database_first.html">(一)DatabaseFirst</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_code_first.html">(二)CodeFirst</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_code_first_fluent_api.html">(三)CodeFirst流暢API</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_repository_unitofwork.html">(四)Repository和UnitOfWork</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_with_unity.html">(五)引入Unity</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_static_repository.html">(六)靜态Repository</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_thread_scope.html">(七)線程安全實踐</a>
<a href="http://www.cnblogs.com/gaochundong/archive/2013/06/09/entityframework_usage_transaction_scope.html">(八)事務處理</a>
<a href="https://github.com/gaochundong/WhenEntityFrameworkMeetUnity">完整代碼下載下傳</a>
本文轉自匠心十年部落格園部落格,原文連結:http://www.cnblogs.com/gaochundong/archive/2013/06/06/entityframework_usage_thread_scope.html,如需轉載請自行聯系原作者