ASP.NET中的每个请求的实体框架对象上下文?

kfc*_*kfc 2 c# asp.net web-applications objectcontext entity-framework-4.1

每个请求使用一个ObjectContext被认为是一种好习惯吗?我读过这些对象应该是短暂的并且实例化的成本并不高,但这是否会使每个请求对其中一个具有吸引力呢?如果是,是否有任何模式正确实现这一点?

Kam*_*yar 5

是的,对于每个HttpRequest具有生命周期的ObjectContext/DbContext,这是一种可接受的方法.这是我在另一个答案中提供的示例.

Hoewever,最好将这些生命周期管理留给IoC库.着名的是Castle Windsor,Autofac.

更新:
要处置您的上下文,您可以使用Application_EndRequestGlobal.asax中的方法.以下代码未经过测试,但您会明白:

protected virtual void Application_EndRequest()
{
    var key = "MyDb_" + HttpContext.Current.GetHashCode().ToString("x")
                      + Thread.CurrentContext.ContextID.ToString();
    var context = HttpContext.Current.Items[key] as MyDbContext;

    if (context != null)
    {
        context.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)