簡體   English   中英

使用Unity和ThreadPool對Dbcontext進行LIfetime管理

[英]LIfetime management of Dbcontext using Unity with ThreadPool

我目前正在使用Unity和Entity框架構建ASP.NET MVC應用程序。 我正在使用Unity MVC 3安裝程序,其中使用ContainerControlledLifetimeManager來解決依賴關系(http://devtrends.co.uk/blog/introducing-the-unity.mvc3-nuget-package-to-reconcile-mvc3-unity -and-IDisposable的)。 直到我嘗試啟動另一個線程,該線程在頁面加載后執行耗時的任務,並且用戶收到更新后,此方法才能正常工作。 從線程,我得到這個錯誤:

The operation cannot be completed because the DbContext has been disposed.

我相信這是因為主線程已經完成,所以容器及其子級被處置了。 有誰知道這個解決方案?

謝謝!

將依賴項注入到控制器中的標准上下文生存期處理無法在您的方案中工作,因為您希望在注入上下文的預期生存期(控制器已發布)之后使用。

您的耗時操作必須引用另一個統一容器,並且必須請求使用Transient或PerResolve生命周期管理器解析的新上下文實例。 當您的操作完成或中止時,它必須處理上下文。

恕我直言在ASP.NET(或任何IIS托管)應用程序中跨越自定義線程不是一個好主意。

通常情況下,問題是在您的控制器中您有以下代碼:

public ActionResult Blah()
{
  MyViewModel model = new MyViewModel();

  using (var dbc = new MyDbContext())
  {
    model.items = from x in dbc.items select x;
  }    

  View(model)
}

在這種情況下, items尚未解決,因此解決方案是:

    model.items = (from x in dbc.items select x).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM