J'utilise Entity Framework et parfois j'obtiendrai cette 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 aucune gestion de connexion manuelle.
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());
}
en utilisant Dispose pattern 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 EF ne réutiliserait-il pas une connexion si elle était déjà ouverte.
predicate
ethistoricPredicate
. J'ai découvert que si vous passezFunc<T, bool>
àWhere()
cela, il se compilera et fonctionnera parfois (car il fait le "où" en mémoire). Ce que vous devriez être en train de faire est passerExpression<Func<T, bool>>
àWhere()
.