Estoy perdido por esto:
He definido mis clases para un primer enfoque de código de marco de entidad (4.1.3). Todo estaba bien (estaba creando las tablas, etc.) hasta que comencé a Seed.
Ahora cuando hago el
Add-Migration "remigrate" ; Update-Database;
Aparece un error en la consola del paquete "Error de validación para una o más entidades. Consulte la propiedad 'EntityValidationErrors' para obtener más detalles".
Tengo un punto de interrupción en mi método Seed (), pero debido a que estoy ejecutando esto en la consola cuando el proyecto no se está ejecutando, no tengo idea de cómo llegar a los detalles (PD: he visto que la validación del hilo falló para una o más entidades al guardar los cambios en la base de datos de SQL Server usando Entity Framework, que muestra cómo puedo ver la propiedad).
Sé que mi método Seed () tiene un problema porque si pongo un retorno justo después de la llamada al método, el error desaparece. Entonces, ¿cómo configuro mi punto de interrupción para poder ver cuál es el error de validación? Un poco perdido. ¿O hay alguna otra forma de rastrearlo en la consola nuget?
Respuestas:
Esto también me molestó recientemente. Lo arreglé colocando una función de contenedor en la clase de Configuración en el método Seed, y reemplacé llamadas a
SaveChanges
llamadas a mi función. Esta función simplemente enumeraría los errores dentro de laEntityValidationErrors
colección y volvería a lanzar una excepción donde el mensaje de Excepción enumera los problemas individuales. Esto hace que la salida aparezca en la consola del administrador de paquetes NuGet.El código sigue:
Simplemente reemplace las llamadas
context.SaveChanges()
conSaveChanges(context)
en su método de inicialización.fuente
public override int SaveChanges()
dentro del contexto.¡Extienda su clase DBContext ya con una definición de clase parcial!
Si observa la definición de clase para su DbContext, será algo como lo siguiente:
Por lo tanto, en otro archivo puede crear la misma definición y anular las partes que desea.
La idea completa con las clases parciales, si notó que DbContext es una clase parcial, es que puede extender una clase que se ha generado (u organizar clases en varios archivos) y en nuestro caso también queremos anular el método SaveChanges desde dentro de una clase parcial que se agrega al DbContext .
De esta manera, podemos obtener información de depuración de errores de todas las llamadas existentes de DbContext / SaveChanges en todas partes y no tener que cambiar su código de Seed o código de desarrollo.
Esto es lo que haría ( NOTA: la diferencia es que simplemente anulo el método SaveChanges en nuestra propia clase parcial DbContext creada , NO LA GENERADA ). Además, asegúrese de que la clase parcial use el espacio de nombres correcto o se golpeará la cabeza contra la pared.
fuente
Convertí la respuesta de Richards a un método de extensión:
Llama así:
fuente
Convertí la versión de craigvl a C # Tuve que agregar contexto. SaveChanges (); para que funcione para mí como a continuación.
fuente
Richard, gracias por llevarme por el camino correcto (tenía el mismo problema) a continuación, es una alternativa sin el contenedor que me funcionó en el método de inicialización de la configuración de migración:
Luego pude ver la excepción en la consola del administrador de paquetes. Espero que esto ayude a alguien.
fuente
fuente