從One DbContext per web request... why?asp.net mvc 4 - 好的,每個線程共享DbContext?
我的理解是,一個DbContext實例不應該在併發web請求之間共享,所以絕對不能跨線程。 但是,如何跨非併發web請求共享它?
由於線程敏捷(What is the meaning of thread-agility in ASP.Net?),我說對了一個線程可以處理多個Web請求之前,它死了嗎?
如果是這樣,依賴注入每個線程的DbContext實例是否安全?
這樣做的原因是我使用Unity,它不包括每個請求生命週期選項。 從MVC, EF - DataContext singleton instance Per-Web-Request in Unity,我想我可以使用自定義的LifetimeManager;我只是想知道使用PerThreadLifetimeManager是否安全。
謝謝!這確實是一個很好的解決方案。但是,DbContext實例是否會被丟棄?另外,你說「一個請求仍然可以獲得多個DbContext實例」,這是否意味着一個請求可以被多個線程處理? – user1501961
@ user1501961:您引用的[question](http://stackoverflow.com/questions/11306888/what-is-the-meaning-of-thread-agility-in-asp-net)解釋了一個ASP.NET請求可以在多個線程上處理。這不會同時發生,它是一個異步模型;它可以在與啓動時不同的線程上完成請求。不,DbContext不會像這樣自動處理。你必須自己編碼,或切換到不同的容器。關於所有其他框架都有內置的支持。 – Steven
會使用HierarchicalLifetimeManager解決問題嗎?在我看來,通過使用HierarchicalLifetimeManager,它爲每個Web請求創建一個新的子容器,並在容器被處置時(Web請求完成時)處理這些實例。我對嗎? – user1501961