c# - net - signalr server
Entidad marco "Excepción de estado de conexión inesperado" (3)
Para otras personas que puedan tener un problema similar. Según los comentarios anteriores, parece que el código utiliza un contexto de base de datos en caché. Después de crear el db-context, se rompió la conexión db (no se instaló ningún controlador StateChange
en la aplicación). Después de la interrupción de la conexión, la aplicación usó el contexto db en caché para realizar algunas operaciones en él.
La creación de un nuevo contexto db solucionó el problema.
Después de tres horas de depuración y búsqueda, espero que alguien aquí tenga una respuesta. Entity Framework (usando MySQL) lanza 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. Al utilizar un proveedor de ajuste, asegúrese de que el evento StateChange se implementa en la conexión Db envuelta.
Sin embargo, a veces la función funciona sin problemas. La excepción se produce en la primera llamada ToList()
:
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 examiné posibles problemas de configuración sin éxito.
A veces, Entity Framework lanza:
System.Data.Entity.Core.EntityCommandExecutionException: Ya existe un DataReader abierto asociado con esta conexión que debe cerrarse primero.
Nuevamente apuntando a la llamada ToList()
. ¿Algunas ideas?
Tuve el mismo problema con Effort.EF6
, pero la actualización de NMemory
(como sugirió el user326608 ) no ayudó. Resulta que XUnit está ejecutando pruebas en paralelo de forma predeterminada desde V2 .
Deshabilitar este comportamiento me lo arregló. Agregue lo siguiente a AssemblyInfo.cs:
using Xunit;
[assembly: CollectionBehavior(CollectionBehavior.CollectionPerAssembly)]
Aunque veo esto como una solución alternativa, las pruebas unitarias deben ser independientes entre sí.
Tuve este problema con Effort.EF6
1.3.0. La solución para mí fue actualizar la dependencia de NMemory
de 1.1.0 a 1.1.2.