ASP.NET MVC中每个请求一个DbContext(没有IOC容器)如果这已经得到回答,请道歉,但如果您不使用IOC容器,如何保证每个请求有一个Entity Framework DbContext?(到目前为止,我遇到的答案涉及IOC容器解决方案。)似乎大多数解决方案都挂钩到HttpContext.Current.Items字典中,但是如何在请求完成时保证处理DbContext?(或者EF的处理不是绝对必要的DbContext吗?)编辑我目前正在我的控制器中实例化和处理我的DbContext,但我在ActionFilters和我的MembershipProvider中也有几个单独的DbContext实例(我刚注意到,也有几个验证器)。因此,我认为集中我的DbContext的实例化和存储以减少开销可能是个好主意。
3 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
我会使用BeginRequest / EndRequest方法,这有助于确保在请求结束时正确处理您的上下文。
protected virtual void Application_BeginRequest(){ HttpContext.Current.Items["_EntityContext"] = new EntityContext();}protected virtual void Application_EndRequest(){ var entityContext = HttpContext.Current.Items["_EntityContext"] as EntityContext; if (entityContext != null) entityContext.Dispose();}
在你的EntityContext类中......
public class EntityContext{ public static EntityContext Current { get { return HttpContext.Current.Items["_EntityContext"] as EntityContext; } }}
慕森卡
TA贡献1806条经验 获得超8个赞
一种方法是订阅Application_BeginRequest
事件,将DbContext注入当前的HttpContext以及Application_EndRequest
从HttpContext和dispose中获取。介于两者之间的任何东西(几乎所有东西:-))都可以从当前的HttpContext中获取DbContext并使用它。而且,是的,你应该处理它。顺便说一下,你有没有理由不使用已经为你做过的DI框架以及其他有用的东西?
- 3 回答
- 0 关注
- 735 浏览
添加回答
举报
0/150
提交
取消