Estou usando o Entity Framework e, ocasionalmente, recebo esse erro.
EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
Mesmo que eu não esteja fazendo nenhum gerenciamento de conexão manual.
esse erro ocorre intermitentemente.
código que aciona o erro (abreviado para facilitar a leitura):
if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}
usando Dispose pattern para abrir sempre uma nova conexão.
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());
}
}
ainda problemático
por que a EF não reutilizaria uma conexão se ela já estiver aberta.
predicate
ehistoricPredicate
variáveis. Eu descobri que se você passarFunc<T, bool>
paraWhere()
ele irá compilar e, às vezes, funcionar (porque faz o "onde" na memória). O que você deve fazer é passarExpression<Func<T, bool>>
paraWhere()
.