Entity Framework: Il y a déjà un DataReader ouvert associé à cette Commande

Je suis en utilisant Entity Framework et parfois je reçois ce message d'erreur.

EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
   at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...

Même si je ne fais pas n'importe quel manuel de gestion de la connexion.

cette erreur se produit par intermittence.

code qui déclenche l'erreur (raccourci pour faciliter la lecture):

        if (critera.FromDate > x) {
            t= _tEntitites.T.Where(predicate).ToList();
        }
        else {
            t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
        }

à l'aide de modèle dispose afin d'ouvrir une nouvelle connexion à chaque fois.

using (_tEntitites = new TEntities(GetEntityConnection())) {

    if (critera.FromDate > x) {
        t= _tEntitites.T.Where(predicate).ToList();
    }
    else {
        t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
    }

}

toujours problématique

pourquoi ne pas EF réutiliser une connexion s'il est déjà ouvert.

  • Je me rends compte que cette question est ancienne, mais je serais curieux de savoir quel est le type de votre predicate et historicPredicate variables sont. J'ai découvert que si vous passez Func<T, bool> à Where() de compiler et parfois de travail (car il ne le "où" à la mémoire). Ce que vous devrait faire, c'est passer Expression<Func<T, bool>> à Where().
InformationsquelleAutor Sonic Soul | 2011-02-01