Sto usando Entity Framework e occasionalmente ottengo questo errore.
EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
Anche se non sto eseguendo alcuna gestione manuale delle connessioni.
questo errore si verifica in modo intermittente.
codice che attiva l'errore (abbreviato per facilitare la lettura):
if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}
utilizzando il modello Dispose per aprire ogni volta una nuova connessione.
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());
}
}
ancora problematico
perché EF non riutilizzerebbe una connessione se è già aperta?
predicate
e lehistoricPredicate
variabili. Ho scoperto che se passiFunc<T, bool>
adWhere()
esso verrà compilato e talvolta funzionerà (perché fa il "dove" in memoria). Quello che dovresti fare è passareExpression<Func<T, bool>>
aWhere()
.