Estoy usando Entity Framework y ocasionalmente obtendré este error.
EntityCommandExecutionException
{"There is already an open DataReader associated with this Command which must be closed first."}
at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands...
Aunque no estoy haciendo ninguna gestión de conexión manual.
Este error ocurre de forma intermitente.
código que desencadena el error (acortado para facilitar la lectura):
if (critera.FromDate > x) {
t= _tEntitites.T.Where(predicate).ToList();
}
else {
t= new List<T>(_tEntitites.TA.Where(historicPredicate).ToList());
}
usando el patrón Dispose para abrir una nueva conexión cada vez.
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());
}
}
sigue siendo problemático
¿Por qué EF no reutilizaría una conexión si ya está abierta?
predicate
yhistoricPredicate
variables son. He descubierto que si pasasFunc<T, bool>
aWhere()
él se compilará y a veces funcionará (porque hace el "dónde" en la memoria). Lo que deberías estar haciendo es pasarExpression<Func<T, bool>>
aWhere()
.