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

时间:2013-05-14 13:01:17

标签: c# asp.net web-applications entity-framework-4.1 objectcontext

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

1 个答案:

答案 0 :(得分:5)

是的,对于每个HttpRequest具有生命周期的ObjectContext / DbContext,这是一种可接受的方法。 Here's a sample我提供了另一个答案。

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

更新
要处置上下文,可以在Global.asax中使用Application_EndRequest方法。以下代码未经过测试,但您会明白这一点:

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();
    }
}