抱歉,如果已解决此问题,但是如果您不使用IOC容器,如何保证每个请求一个Entity Framework DbContext? (到目前为止,我遇到的答案涉及IOC容器解决方案。)

似乎大多数解决方案都卡在HttpContext.Current.Items字典中,但是如何确保请求完成后处置DbContext? (或者使用EF DbContext处置不是绝对必要的吗?)

编辑

我目前正在实例化并在 Controller 中放置DbContext,但是在ActionFilters和MembershipProvider中我也有几个单独的DbContext实例化(我刚刚注意到,还有两个验证器)。因此,我认为集中化我的DbContext的实例化和存储以减少开销可能是一个好主意。

最佳答案

我将使用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; }
    }
}

10-06 06:01