抱歉,如果已解决此问题,但是如果您不使用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; }
}
}