Je suis en train d'utiliser Entity Framework et occasionnellement je vais obtenir cette erreur.
EntityCommandExecutionException
{"Il existe déjà un DataReader ouvert associé à cette Commande qui doit être fermé en premier."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
Même si je ne gère pas la connexion manuellement.
cette erreur se produit de manière intermittente.
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(_tEntitites.TA.Where(historicPredicate).ToList());
}
utilisation du modèle Dispose pour 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(_tEntitites.TA.Where(historicPredicate).ToList());
}
}
toujours problématique
pourquoi EF ne réutiliserait-il pas une connexion si elle est déjà ouverte.
1 votes
Je réalise que cette question est ancienne, mais je serais intéressé de savoir quel type sont vos variables
predicate
ethistoricPredicate
. J'ai découvert que si vous passezFunc
àWhere()
, cela compilera et fonctionnera parfois (car il fait le "where" en mémoire). Ce que vous devriez faire, c'est passerExpression>
àWhere()
.