EF Code First DBContext在Web应用程序中的生命周期

3
我们正在使用cEF code first开发ASP.NET Web应用程序。在请求中,最好的创建/销毁DBContext的位置在哪里?我只有一个上下文,并且没有使用任何DI容器。目前,每个请求都有多个方法调用,每个方法都会创建自己的上下文。我该怎么说,像是…GetContextforRequest(),并在请求处理完毕后将其释放?谢谢。
1个回答

7
在每个请求中拥有一个上下文是使用上下文的一种非常好的方式,因为它可以减少创建上下文的开销。您可以在BeginRequest上创建新的上下文,并将其存储在HttpContext.Current.Items中,在EndRequest上进行处理。
然后,您可以创建一个GetContextforRequest()方法来封装从HttpContext.Current.Items中获取内容的过程。
但是,我建议您考虑使用DI容器。大多数DI容器都有帮助程序,可以帮助您在每个请求中创建和处理对象。
编辑:
在请求期间打开上下文的好处是,您可以利用一级缓存。这是对象在上下文的生命周期内被缓存的地方。因此,假设您有一个名为User的表格,其中包含一堆用户,并且在同一请求中两次调用context.Set().ToList(),第一次调用会从数据库中获取数据,而第二次调用会从一级缓存中检索数据。

请求完成后,您是否处理了DbContext? - Mike Cole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接