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

本文关键字:请求 NET ASP 框架 对象 上下文 实体 | 更新日期: 2023-09-27 18:13:34

是否认为每个请求使用单个ObjectContext是一种良好的实践?我读到这些对象应该是短暂的,并且实例化的成本不是很高,但是这是否使得每个请求都需要一个对象呢?如果是,是否有适当实现这一点的模式?

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

是的,每个HttpRequest都有ObjectContext/DbContext的生命周期,这是一种可以接受的方法。这是我在另一个回答中提供的一个例子。

然而,最好将这些生命周期管理留给IoC库。著名的有温莎城堡,autofacc。

更新:
要处理上下文,可以在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();
    }
}