Estoy usando el código de Entity Framework primero en mi sitio web y me pregunto si hay alguna forma de depurar los códigos de migración. Ya sabes, como establecer puntos de interrupción y cosas como esta.
Estoy usando Package Manager Console para actualizar la base de datos usando Update-Database
.
Gracias
Respuestas:
Sé que EF Code First Migrations es una herramienta relativamente nueva, pero no olvides que todavía estás en .NET.
Entonces puedes usar:
Después de eso, puede ver su InnerException.
O puede usar la declaración try ... catch de esta manera: Manejo de excepciones Entity Framework
fuente
Para alcanzar un punto de interrupción en una migración de base de datos, establezca el contexto en MigrateDatabaseToLatestVersion al inicializar.
Luego, simplemente depura normalmente (ejecuta usando f5) y el punto de interrupción llegará la primera vez que ejecutes el proyecto.
El problema ahora es que si depura por segunda vez la migración no se ejecutará. Esto se debe a que la tabla __MigrationHistory se ha actualizado para indicar que ha migrado a la última versión. Para volver a probar la migración, abra la consola del administrador de paquetes y baje a la migración anterior:
fuente
Mi respuesta puede ser un poco tonta, pero de todos modos aquí va. Si, como yo, algunas veces tiene problemas con el método Seed (), lo que suelo hacer es crear un método público que llame a Protect Seed ().
luego en mi HomeController llamo a este método en modo de depuración.
Sé que es una solución poco convincente, pero es simple y rápida. Por supuesto, esto debe hacerse después de que se haya creado el modelo. Entonces paso a paso:
descomente el método Seed () y agregue el "hack" que mencioné anteriormente.
en la configuración deshabilitar las migraciones automáticas
AutomaticMigrationsEnabled = false; // si tiene esto desactivado, omita este paso
Depure su aplicación, corrija el error y elimine el "hack"
fuente
Aquí hay un método más a prueba de fallas que hará el truco sin mucho alboroto:
Paso 1: coloque este fragmento de código justo encima de la migración que desea depurar:
Paso # 2: compila el proyecto que contiene tus migraciones
Paso 3: abra una consola dentro del directorio de salida (/ bin / Debug, / bin / Release, etc.) que contiene el dll de sus migraciones
Paso 4: invoque migrate.exe con el parámetro / scriptFile para iniciar el depurador y realmente depurar la migración de db deseada
Una vez que aparezca el cuadro de diálogo del selector de depurador, elija la instancia de Visual Studio que ya ha abierto.
fuente
Puede agregar instrucciones Console.WriteLine al código de migración (no es una gran solución)
Tenga en cuenta que los mensajes solo se muestran si ejecuta el código de migración utilizando la
migrate.exe
utilidad (inpacakges\EntityFramework.x.y.z\tools
). No se mostrarán si ejecuta la migración a través de la consola de Package Manager.fuente
He tenido mucha suerte usando "Debugger.Launch ()" (como en la respuesta de m_david anterior ) en otro lugar, pero dentro de CreateDbContext parece de alguna manera adjuntar, y no adjuntar. Lo que quiero decir es que se adjunta y comienza a intentar ingresar a archivos .asm y archivos .cpp (código interno). Si trato de establecer un punto de interrupción en una consola. La línea de escritura que sé que se ejecuta después (puedo ver el resultado de CUALQUIER "comando de migraciones de dotnet ef") lo ejecuta y nunca llega al punto de interrupción.
Esto es lo que funcionó para mí en su lugar:
Puede ejecutar la migración y adjuntarla manualmente con Visual Studio y , de hecho, le permitirá recorrer el código como esperaba, es simplemente más doloroso. Lo que realmente debería probar es la combinación de ambos métodos ...
fuente
También encontré un buen truco aquí para obtener los detalles del error ...
Básicamente, el truco consiste en obtener toda la información de una excepción, ponerla en una cadena y lanzar una nueva DbEntityValidationException con la cadena generada y la excepción original.
fuente