viernes, 6 de noviembre de 2015

Code First Migrations: Borrón y cuenta nueva

Cuando trabajas con Code First es muy habitual (por no decir casi obligatorio si no buscas alguna alternativa) el trabajar con migraciones basadas en código.

Con el paso del tiempo, te pasará que la carpeta Migrations tendrá una cantidad ingente de código que refleja el cómo ha evolucionado tu modelo. Si te resulta necesario mantener este código para poder hacer un hipotético downgrade de tu aplicación, no sigas leyendo, este post no es para ti. Sin embargo, si tienes la certeza de que tu última versión publicada es válida y no vas a querer nunca revertir los cambios, puede ser una buena idea el desprenderte de esa base de código que está ahi, pero no te va a servir para nada… bueno sí, para que VS vaya más lento y ReSharper tenga más trabajo cuando actives Solution-Wide Analysis.

Decididos ya a soltrar lastre ¿Cómo elimino todas las migraciones de __MigrationHistory y hago coincidir mi modelo con el esquema actual de la base de datos?

El proceso a seguir es el siguiente:

  • Borrar la tabla __MigrationHistory
  • Borrar la carpeta Migrations de VS
  • Ejecutar el comando Enable-Migrations
  • Ejecutar el comando Add-Migration InitialCreate
    • Que el nombre de la migración sea InitialCreate es sólo una convención, podría ser cualquier otro.
  • Comentar el código del método Up de la migracion
  • Ejecutar el comando Update-Database
    • Creará la tabla __MigrationHistory
  • Descomentar el código del método Up de la migración
    • Así al llamar a Update-Database siguientes veces y si la base de datos no existe, se creará una nueva con todos los objetos que se capturaron en este primer snapshot.

Después de esto tendremos una nueva tabla __MigrationHistory con una sola migración que coincidira con nuestro modelo.

Lógicamente, para llevar a cabo esta operación primero deberíamos tener en cuenta si hemos incluido código personalizado en el método Up de alguna migración. En caso afirmativo, deberemos analizar ese código de forma particular y ver si sigue siendo necesario en nuestro nuevo e impoluto escenario.

Un saludo!

3 comentarios:

  1. Es un truquillo muy útil a tener en cuenta. De la misma manera, se puede partir de una base de datos existente y empezar a aplicar Code First.

    ResponderEliminar
  2. Pues sí, la verdad es que tiene su miga el tema de las migraciones, en el momento que te sales del "escenario ideal" toca entender bien como funcionan para poder empezar a trapichear con ellas :) Yo ahora estoy pegándome con como gestionar las migraciones en un equipo con varios desarrolladores https://msdn.microsoft.com/en-us/data/dn481501 a ver que tal!
    Un saludo y gracias por comentar.

    ResponderEliminar
  3. El problema que estoy teniendo y definitivamente me va tocar aplicar este método, es que pase de ef4 a ef6 y a partir de ahí, el modelo, por una extraña razón que aún no entiendo, ya no coincide.

    ResponderEliminar