Code First – Resetear Entity Framework Migrations

Si trabajas con Code First, Entity Framework y Migrations es posible que a medida que avanzas en el proyecto llegues a un estado inconsistente de la base de datos cuando intentas actualizarla con el comando update-database.

Lo ideal es solucionarlo con las opciones que te puede ofrecer codefirst, pero si aún así llegas a un punto que creas necesario resetear las migraciones lo que deberás hacer es lo siguiente:

1. – Borrar el directorio Migrations de tu proyecto.
2. – Borrar la tabla _MigrationsHistory de tu base de datos.
3. – Ejecutar el siguiente comando en la consola de administración de paquetes.

Enable-Migrations -EnableAutomaticMigrations -Force

4. – Finalmente ejecutar:

Add-Migration Initial

Todo este proceso hace que se cree un nuevo archivo Initial.cs en la carpeta de Migrations. En él podrás ver (como siempre que realizas una migración) los métodos Up() y Down() que permiten la aplicación de la migración o el regreso al estado anterior.

En este punto antes de utilizar el comando update-database deberás tener en cuenta si quieres borrar la base de datos y partir con la base de datos vacía o aprovechar los datos que ya tenías previamente.

A) Si deseas partir con una base de datos vacía será tan sencillo como borrar todas las tablas de la base de datos y ejecutar update-database.
B) Si quieres aprovechar los datos deberás profundizar en el método Up() de la migración creada y ver que tablas quieres que se regeneren. Previamente a ejecutar update-database deberás borrar las tablas que te interesan resetear en tu base de datos y comentar las líneas de código que crean las tablas que deseas conservar en el método Up(). Una vez realizadas estas dos comprobaciones podrás utilizar el comando update-database.

Espero que este artículo te haya servido de ayuda para Resetear Entity Framework Migrations.

6 comentarios en “Code First – Resetear Entity Framework Migrations

  1. Hola, te consulto una vez echo esto Enable-Migrations -EnableAutomaticMigrations -Force, como vuelvo a regenerar los objetos? ya que el add-migration initial me lo genera vacio.
    Gracias.

    1. Hola Maxi, muchas gracias por tu mensaje.

      En relación a tu pregunta creo que depende de en qué estado tengas la base de datos y por otro lado tus entidades en tu código.

      Si dispones de la base de datos íntegra yo te recomendaría crear un nuevo Modelo desde tu aplicación, añadiendo un nuevo item de tipo ADO.NET Entity Data Model y seleccionar codefirst desde base de datos ya creada. De este modo se generarán todas tus entidades partiendo de nuevo desde un punto estable. Podrás borrar el anterior modelo pero deberás refactorizar muchas partes de tu aplicación al nuevo nombre que hayas establecido al nuevo modelo.

      Si no dispones de la base de datos pero sí de las entidades yo crearía un nuevo item de tipo ADO.Net Entity Data Model pero esta vez codefirst en nueva base de datos. Utilizaría las entidades que ya dispones en tu código para añadirlas a este nuevo modelo. Una vez pasadas podríamos utilizar una migración inicial para establecer un punto estable. Del mismo modo deberías renombrar cualquier referencia al modelo dentro de tu aplicación al haberse establecido un nuevo nombre.

      Espero haber comprendido tu pregunta y haberte podido ayudar.

  2. en algunos casos debes es darle el contexto, para que sepa a quien neccesita buscar o que neccesita controlar…

    Enable-Migrations -ContextTypeName CursoDBContext -EnableAutomaticMigrations -Force

    el contexto que yo tengo es CursoDBContext y asi me funciona bien!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *