为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NET MVC中每个请求一个DbContext(没有IOC容器)

ASP.NET MVC中每个请求一个DbContext(没有IOC容器)

蓝山帝景 2019-08-16 14:53:26
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; }
    }}


查看完整回答
反对 回复 2019-08-16
?
慕森卡

TA贡献1806条经验 获得超8个赞

一种方法是订阅Application_BeginRequest事件,将DbContext注入当前的HttpContext以及Application_EndRequest从HttpContext和dispose中获取。介于两者之间的任何东西(几乎所有东西:-))都可以从当前的HttpContext中获取DbContext并使用它。而且,是的,你应该处理它。顺便说一下,你有没有理由不使用已经为你做过的DI框架以及其他有用的东西?


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 735 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信