2012-02-03 91 views
3

我一直在ASP.NET MVC3門戶中使用Ninject IoC容器。每當我一直注入實體框架DbContextPerThread範圍內,我的數據是不一致的,更改實體後一段時間我不會得到displayd是否需要在ASP.NET應用程序中注入.InPerRequestScope DbContext?

當我切換IoC配置爲每個請求(PerRequestScope())解析我的DbContext實例的新副本,所有問題都消失了。

那麼,在MVC3應用程序中使用PerRequest注入策略是絕對必須的嗎?

+0

您的數據不一致,因爲DbContext根據它放置在對象之前。更改爲每個http請求可解決此問題。 – 2012-02-03 01:29:37

+0

@TravisJ:事實並非如此;寵物線程範圍處理_later_。 – SLaks 2012-02-03 01:33:01

+0

@SLaks - 這不是重點嗎?由於上下文被處置,數據是否不一致? – 2012-02-03 08:30:10

回答

9

是的,這是強制性的。

你的問題是這樣的:

  • 線程A加載實體
  • 線程B修改了實體
  • 下一個請求線程A使用第一次請求緩存的實體,忽略了變化
+3

+1有一點明確:每個直接或間接包含DbContext的服務都是必需的。如果您有其他服務不包含DbContext,則可以使用不同的生命週期範圍來配置這些服務。 – 2012-02-03 06:35:01

相關問題