Quería depurar el Seed()
método en mi clase de configuración de la base de datos de Entity Framework cuando lo ejecuto Update-Database
desde la Consola del Administrador de paquetes, pero no sabía cómo hacerlo. Quería compartir la solución con otros en caso de que tuvieran el mismo problema.
entity-framework-5
Sachin Kainth
fuente
fuente
migrate.exe
desde la consola para adjuntar el estudio visual que se está ejecutando actualmente. Más información en esta respuesta: stackoverflow.com/a/52700520/350384La forma en que resolví esto fue abrir una nueva instancia de Visual Studio y luego abrir la misma solución en esta nueva instancia de Visual Studio. Luego adjunté el depurador en esta nueva instancia a la instancia anterior (devenv.exe) mientras ejecutaba el comando update-database. Esto me permitió depurar el método Seed.
Solo para asegurarme de que no perdí el punto de interrupción al no adjuntar a tiempo, agregué un Thread.Sleep antes del punto de interrupción.
Espero que esto ayude a alguien.
fuente
Si necesita obtener el valor de una variable específica, un truco rápido es lanzar una excepción:
fuente
Una solución más limpia (supongo que esto requiere EF 6) sería en mi humilde opinión llamar a la base de datos de actualización desde el código:
Esto le permite depurar el método Seed.
Puede dar un paso más y construir una prueba unitaria (o, más precisamente, una prueba de integración) que crea una base de datos de prueba vacía, aplica todas las migraciones de EF, ejecuta el método Seed y vuelve a descartar la base de datos de prueba:
¡Pero tenga cuidado de no ejecutar esto en su base de datos de desarrollo!
fuente
Sé que esta es una pregunta antigua, pero si todo lo que desea son mensajes y no le interesa incluir referencias a WinForms en su proyecto, hice una ventana de depuración simple donde puedo enviar eventos de seguimiento.
Para una depuración más seria y paso a paso, abriré otra instancia de Visual Studio, pero no es necesario para cosas simples.
Este es el código completo:
SeedApplicationContext.cs
Y en su Configuration.cs estándar
fuente
SeedInternal
método pueda usarlo)Uh La depuración es una cosa, pero no olvide llamar: context.Update ()
Además, no envuelva el try catch sin que se derramen buenas excepciones internas en la consola.
https://coderwall.com/p/fbcyaw/debug-into-entity-framework-code-first con catch (DbEntityValidationException ex)
fuente
Tengo 2 soluciones alternativas (sin
Debugger.Launch()
ya que no funciona para mí):Para imprimir un mensaje en la consola de Package Manager, utilice la excepción:
throw new Exception("Your message");
Otra forma es imprimir el mensaje en un archivo creando un
cmd
proceso:fuente