C # Entity Framework usando apenas um ObjectContext por HttpContext

No ASP.NET MVC 2, usando o Entity Framework 4, estou recebendo este erro "Um objeto de entidade não pode ser referenciado por várias instâncias do IEntityChangeTracker".

Uma pesquisa do SO mostra que provavelmente é porque tenho instâncias diferentes do Entity Framework ObjectContext, quando deveria ser apenas uma instância do ObjectContext para cada HttpContex

Eu tenho esse código (escrito muito antes de ingressar) que parece fazer exatamente isso - tenho um ObjectContext para cada HttpContext. Mas estou recebendo a exceção "IEntityChangeTracker" com frequência, portanto provavelmente não está funcionando conforme o esperado:

// in ObjectContextManager.cs
public const string ConnectionString = "name=MyAppEntities";
public const string ContainerName = "MyAppEntities";

public static ObjectContext GetObjectContext()
{
    ObjectContext objectContext = GetCurrentObjectContext();
    if (objectContext == null) // create and store the object context
    {   
        objectContext = new ObjectContext(ConnectionString, ContainerName);     
        objectContext.ContextOptions.LazyLoadingEnabled = true;    
        StoreCurrentObjectContext(objectContext);
    }
    return objectContext;
}

private static void StoreCurrentObjectContext(ObjectContext objectContext)
{
    if (HttpContext.Current.Items.Contains("EF.ObjectContext"))
        HttpContext.Current.Items["EF.ObjectContext"] = objectContext;
    else
        HttpContext.Current.Items.Add("EF.ObjectContext", objectContext);
}

private static ObjectContext GetCurrentObjectContext()
{
    ObjectContext objectContext = null;
    if (HttpContext.Current.Items.Contains("EF.ObjectContext")
        objectContext = (ObjectContext)HttpContext.Current.Items["EF.ObjectContext"];
    return objectContext;
}

Examinei esse código e parece correto. Faz tanto quanto eu posso dizer retornar uma instância ObjectContext para cada HttpContext. O código está errado?

Se o código não estiver errado, por que outro motivo eu receberia a exceção "Um objeto de entidade não pode ser referenciado por várias instâncias do IEntityChangeTracker"

EDIT: para mostrar como o ObjectContext é descartado:

// in HttpRequestModule.cs
private void Application_EndRequest(object source, EventArgs e)
{
    ServiceLocator.Current.GetInstance<IRepositoryContext>().Terminate();
}

// in RepositoryContext.cs
public void Terminate() 
{
    ObjectContextManager.RemoveCurrentObjectContext();
}

// in ObjectContextManager.cs
public static void RemoveCurrentObjectContext()
{
    ObjectContext objectContext = GetCurrentObjectContext();
    if (objectContext != null)
    {
        HttpContext.Current.Items.Remove("EF.ObjectContext");
        objectContext.Dispose();
    }
}

questionAnswers(1)

yourAnswerToTheQuestion