2012-02-03 39 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

相关问题