Una de las cosas interesantes que nos proporciona Entity Framework Code First, es que es capaz de generar todo el esquema de la base de datos a partir del conjunto de clases que hemos generado, y además, si ejecutamos una acción por defecto, actualiza la estructura por nosotros. (Por lo pronto esta acción se efectúa borrando la base de datos y creando una nueva, con lo cual tenedlo en cuenta en vuestros entornos de producción).
Esto funciona bien siempre y cuando tengamos los permisos oportunos, pero, y si tuvieramos que hacer el despliegue sobre una base de datos específica, y ya creada (por ejemplo, un hosting do.nde solamente tienes acceso a una base de datos que te dan, y no puedes crear otras)? Si intentasemos hacerlo nos diría que la base de datos no se puede migrar porque no tiene la información de metadatos.
Para resolver este «ligero inconveniente» hemos de reemplazar, para la primera ejecución, la acción del inicializador, que en un principio puede ser esta:
DbDatabase.SetInitializer<ProductContext>( new DropCreateDatabaseIfModelChanges<ProductContext>());
por esta:
DbDatabase.SetInitializer<ProductContext>( new DropCreateDatabaseAlways<ProductContext>());
De esta manera nos aseguramos que la base de datos sea borrada y creada desde 0, con la información de metadatos correctamente actualizada. Una vez creada, y comprobado que funciona no olvideis volverlo a colocar como estaba ya que de lo contrario la base de datos será borrada e inicializada cada vez que carguemos nuestra aplicación, y no queremos eso…. verdad?
Espero que os sea de utilidad.