2009-07-17 5 views
0

Notre application suit l'approche de maintenir un DataContext par Thread/HttpContext, en utilisant la classe DataContextFactory décrite par Rick Strahl sur son blog, y compris l'amendement à la clé mentionné par Richard (utilisation de type.AssemblyQualifiedName).Scoped DataContext soulève par intermittence l'erreur ExecuteReader

La solution est apparue son (bien que dans la plupart des cas une approche différente peut-être mieux), mais en utilisant ce que j'ai vu des erreurs intermittentes qui apparaissent dans l'application:

ExecuteReader nécessite une ouverture et connexion disponible. L'état actuel de la connexion est fermé.

-je accéder au datacontext à travers le code en utilisant la propriété ci-dessous, qui fait partie de ma classe 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>(); 
    } 
} 

Être intermittment Je vais avoir du mal à épingler cette baisse. Est-ce que quelqu'un sait ce que je pourrais faire de mal, ou a une bonne idée de la façon dont je pourrais déboguer ce problème?


Notez cela pourrait peut-être un double du sans réponse question here

Répondre

0

Nous utilisons maintenant un DataContextFactory personnalisé qui maintient DataContexts par transaction. Le seul autre changement principal était l'utilisation de [ThreadStatic] pour les propriétés, plutôt que d'accéder manuellement via Thread.Get/SetData

Depuis ce changement le problème ne semble plus apparaître, et comme aucune autre réponse n'a été avancée, Je suggère [ThreadStatic] comme solution

Questions connexes