Contexto do objeto da estrutura de entidades no objeto de sessão do ASP.NET?

Temos um aplicativo Asp.NET Web Forms de várias camadas. A camada de dados tem uma classe chamadaDataAccess quais impulsosIDisposable e tem uma instância do nosso Entity Framework Object Context como um campo privado. A classe tem vários métodos públicos retornando várias coleções de Entidades e descartará seu Contexto de Objeto quando for descartado.

Devido a vários problemas que enfrentamos, decidimos que seria uma grande vantagem manter o Contexto do Objeto (ou uma instância deDataAccess) no escopo por mais tempo no servidor. Foi feita uma sugestão para manter uma instância noHttpContext.Current.Items coleção deesta postagem para ter uma instância por solicitação de HTTP.

O que estou me perguntando é: que problemas / preocupações / problemas surgiriam ao armazenar uma instância do nosso Contexto do Objeto no diretórioHttpContext.Current.Session objeto????

Suponho que o objeto Session seja finalizado e definido para coleta de lixo quando a sessão de um usuário expirar, para que a instância seja descartada corretamente.Suponho que a maioria das configurações padrão do navegador permitirá que nosso aplicativo coloque seu cookie SessionId sem hesitações.A quantidade de dados com a qual o Contexto do Objeto estará lidando não é enorme e não representa um problema para o hardware decente do servidor, no que diz respeito ao cache ao longo do tempo e a relativamente poucos usuários simultâneos.

Isso será relativamente rápido de implementar e não afetará nossos muitos testes de unidade existentes.

Usaremos o AutoFac e uma classe ServiceProvider para fornecer instâncias. Quando uma instância do ObjectContext é necessária, ela será retornada por código semelhante a este:

private static Entities GetEntities(IContext context)
{
    if (HttpContext.Current == null)
    {
        return new Entities();
    }

    if (HttpContext.Current.Session[entitiesKeyString] == null)
    {
        HttpContext.Current.Session[entitiesKeyString] = new Entities();
    }

    return (Entities)HttpContext.Current.Session[entitiesKeyString];
}

Felicidades.

questionAnswers(2)

yourAnswerToTheQuestion