EF6 Migraciones en servidor de producción

Fuentes


Advertencia

Siempre crear Backups

Nota

Si se puede, copiar en producción la tabla dbo._MigrationHistory (todos los SQL que genera) para tener una referencia del estado en producción.

Para aplicar migraciones en producción, una manera que he encontrado es generando Update-Database -Script desde el entorno de desarrollo.

Nota

Con -Script siempre mostrara el SQL, no ejecuta las sentencias en la base de datos.

Cada vez que se hace un cambio en el modelo, se ha de crear una migración con Add-Migration NombreMigracion que genera un archivo en ~/Migrations/fecha_NombreMigracion.cs.

Una manera de obtener el SQL con los cambios en Update-Database -Script, pudiendo ver lo que va a ejecutar en la base de datos (ejecutara todos los archivos de migración pendiente, es decir los que no tenga registrados en la tabla dbo._MigrationHistory).

Copiando el SQL del script generado y luego en producción ejecutarlo.

Cuando en desarrollo se han ejecutado todas las migraciones, para obtener los cambios de la base de datos, se ha de ejecutar una combinación de banderas.

Imaginando que se tienen 5 migraciones, por orden de fecha:

fecha_Initial.cs
fecha_Segunda.cs
fecha_Tercera.cs
fecha_Cuarta.cs
fecha_Quinta.cs

La base de datos en producción tiene fecha_Initial, fecha_Segunda y fecha_Tercera y en desarrollo todas.

Para obtener el SQL de fecha_Cuarta y fecha_Quinta se han de revertir los cambios se utiliza una combinación de -SourceMigration y -TargetMigration.

Update-Database -Script -SourceMigration: Tercera -TargetMigration: Quinta

Se pone en -SourceMigration la ultima migración del servidor de producción y en -TargetMigration la ultima migración. De esta manera se obtiene todo el SQL que se deberá aplicar al servidor de producción.