Asp.net mvc 2 structuremap实体框架4连接

Asp.net mvc 2 structuremap实体框架4连接,asp.net-mvc-2,entity-framework-4,structuremap,Asp.net Mvc 2,Entity Framework 4,Structuremap,我正在为我的entity framework 4实体使用以下Structuremap引导代码: x.For<XEntities>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.PerRequest)).Use(() => new XEntities()); 我正在使用ASP.NET MVC 2,在我的应用程序中有以下内容 EndRequest+=新的EventHandlerMVCapApplication\u EndR

我正在为我的entity framework 4实体使用以下Structuremap引导代码:

x.For<XEntities>().LifecycleIs(Lifecycles.GetLifecycle(InstanceScope.PerRequest)).Use(() => new XEntities());
我正在使用ASP.NET MVC 2,在我的应用程序中有以下内容 EndRequest+=新的EventHandlerMVCapApplication\u EndRequest

void MvcApplication_EndRequest(object sender, EventArgs e)
{
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
我能做些什么来解决这个问题

[编辑] 这发生在一个有多个图像的页面上。图像来自数据库,由控制器操作提供服务,控制器操作从数据库读取图像,并将其作为文件结果发送到浏览器。我认为asp.net正在破坏我的objectcontext,当图像请求进入时关闭我的db连接,并引发异常


我现在需要的是一种正确的方法,以良好的方式管理对象上下文的生存期。

为什么要在Application\u Start中为EndRequest分配委托

直接与事件挂钩即可:

protected void Application_EndRequest()
{
    ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects();
}
另外,我以前从未使用过这种语法,我就是这样做的:

For<XEntities>().HybridHttpOrThreadLocalScoped().Use<XEntities>()

另外,在什么时候更新数据上下文?你能展示一些代码吗

我尝试了您的方法x.For.hybridhtttporthreadlocalscoped.Usenew xenties;这就是我创建数据上下文的方式。我现在直接在事件中钩住了endRequest,得到了以下异常:ObjectContext实例已被释放,不能再用于需要连接的操作。@jwdehaan-您在哪里使用数据上下文?在你的控制器里?通过存储库?您可以展示一些代码吗?您肯定不想在EndRequest事件中调用ObjectFactory上的任何东西。ObjectFactory是静态的,这意味着它是在所有请求上使用的同一个对象。您可以在处理过程中调用ReleaseAndDispose处理请求。什么是XEntities?这就是管理数据库连接的对象吗?您可能不需要InstanceScope.PerRequest生命周期,因为这是默认情况下的请求=对容器的调用。我想你的意思是在整个HTTP请求中给我相同的对象。如果是这种情况,请查看HTTP作用域的生命周期,如RPM1984所示。XEntities是我的EF ObjectContext;我收到一个异常:基础提供程序在onOpen上失败,InnerException:{操作无效。连接已关闭。}
For<XEntities>().HybridHttpOrThreadLocalScoped().Use<XEntities>()