2

每个请求使用单个ObjectContext是否被认为是一种很好的做法?我读这些对象应该是短暂的,并且实例化并不是非常昂贵,但是这会使每个请求对其中的一个案例有吸引力吗?如果是的话,有没有适当的实施这种模式?ASP.NET中每个请求的实体框架对象上下文?

+1

简短的回答:是的。更多细节(模式...):这是webforms还是MVC? – ken2k 2013-05-14 13:05:28

+0

太棒了!它的webforms – kfc 2013-05-14 13:09:16

回答

5

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

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

更新:
要处理你的情况下,你可以使用Application_EndRequest方法Global.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(); 
    } 
} 
+0

使用带有webforms的IOC似乎有点复杂。由于我有一个小应用程序,我想我会用你指出的示例中提出的解决方案。那么现在有没有办法在请求终止后强制处理请​​求范围的Context对象? – kfc 2013-05-15 09:48:01

+0

@kfc更新了我的答案。 – Kamyar 2013-05-15 09:58:09

相关问题