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?

Respuestas a la pregunta(3)

Su respuesta a la pregunta