Excepción de "Estado de conexión inesperado" de Entity Framework
Después de tres horas de depuración y búsqueda, espero que alguien aquí tenga una respuesta. Entity Framework (usando MySQL) arroja la siguiente excepción si llamo a la siguiente función rápidamente en sucesión (por ejemplo, <0.1 segundos de diferencia).
System.InvalidOperationException: estado de conexión inesperado. Cuando utilice un proveedor de envoltura, asegúrese de que el evento StateChange se implemente en la DbConnection envuelta.
Sin embargo, a veces la función funciona sin ningún problema. La excepción se lanza en el primerToList()
llamada:
void InsertOrUpdateMaterials(List<Material> materials)
{
var id = GetUserId();
var materialIds = materials.Select(x => x.MaterialId).ToList();
// Remove old materials from DB
var oldMaterials = Db.Materials.Where(p => p.CreatedBy == id &&
materialIds.Contains(p.MaterialId)).ToList(); // exception
Db.Materials.RemoveRange(oldMaterials);
Db.SaveChanges();
// Replace previous materials with the new ones in list
Db.Materials.AddRange(materials);
Db.SaveChanges();
}
Curiosamente, este error nunca ocurrió en el servidor de desarrollo, por lo que busqué posibles problemas de configuración en vano.
A veces, Entity Framework arroja:
System.Data.Entity.Core.EntityCommandExecutionException: ya hay un DataReader abierto asociado con esta conexión que debe cerrarse primero.
De nuevo apuntando a laToList()
llamada. ¿Algunas ideas?