Migraciones e inicializadores en EF 6

Bueno, creo que esta entrada es de esas que a alguno les quitará alguna hora de encima de volverse loco…. Con EF 6 el equipo de trabajo ha hecho un pequeño cambio de comportamiento en los inicializadores dependiendo de si Migrations está activa o no.  Concretamente, inicializadores como DropCreateDatabaseAlways y DropCreateDatabaseIfModelChanges no funcionan como esperamos si la base de datos no existe, de hecho, si intentamos ejecutar nuestro código con uno de estos inicializadores el sistema nos dará una bonita excepción con un mensaje parecido al siguiente:

Additional information: Migrations is enabled for context ‘XXXXX’ but the database does not exist or contains no mapped tables. Use Migrations to create the database and its tables, for example by running the ‘Update-Database’ command from the Package Manager Console.

El error es claro, pero.. ¿Porqué?. Personalmente a mi este comportamiento no me gusta nada, de hecho hay escenarios dónde quiero tener estos inicializadores con sus Seed, como por ejemplo para mis tests integrados contra la BD. Usar MigrateToLatestVersionDatabase tampoco es una solución por dos motivos, esta no borra la base de datos anterior, y yo es algo que puedo necesitar y además tampoco tiene un seed a usar, se supone que para eso tenemos nuestra configuración de migraciones, pero, no es lo que quiero.

 

Para todos aquellos que como yo, queráis tener un inicializador que borre y cree la base de datos en la ultima migración conocida podéis utilizar el siguiente código, que espero pronto lo suba a mi proyecto de contrib.

 

 

EDITADO: Parece que para EF 6.1 volveremos a tener el comportamiento correcto

 

 

Un saludo

 

Unai


Deja un comentario

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