Pergunta

Nosso aplicativo segue a abordagem de manter um datacontext por thread/httpContext, usando a classe DataContextFactory delineada por Rick Strahl em seu blog, incluindo a emenda à chave mencionada por Richard (uso do tipo.AssemmblyqualifiedName).

A solução pareceu som (embora na maioria dos casos uma abordagem diferente possa ser melhor), no entanto, ao usar isso, vi erros intermitentes aparecendo no aplicativo:

O Executreader requer uma conexão aberta e disponível. O estado atual da conexão está fechado.

Eu acesso o DataContext em todo o código usando a propriedade abaixo, que faz parte da classe do meu Datacontext:

/// <summary>
/// Returns the current datacontext for the thread or HttpContext, creating one if it does not exist.
/// </summary>
public static SharedDataContext Current
{
    get
    {
        return DataContextFactory.GetScopedDataContext<SharedDataContext>();
    }
}

Sendo intermitente, estou tendo dificuldade em prender isso. Alguém sabe o que eu poderia fazer de errado ou tem uma boa ideia de como posso depurar esse problema?


Observe que isso pode ser uma duplicata do sem resposta pergunta aqui

Foi útil?

Solução

Agora usamos um DataContextFactory personalizado que mantém o DataContexts por transação. A única outra mudança principal foi o uso do [ThreadStatic] para as propriedades, em vez de acessando manualmente via Thread.get/SetData

Como essa mudança, o problema não parece mais parecer e, como nenhuma outra resposição foi apresentada, estou sugerindo [Threadstatic] como a solução

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top