ASP.NET中的每个请求的entity framework对象上下文?

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

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

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

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