Pregunta sobre entity-framework, ef-migrations – ¿Cómo usar las migraciones en una base de datos existente en la producción creada con Entity Framework 4.1?

12

Tengo un sistema en producción que fue creado con Entity Framework 4.1 Code First. Ahora, me he actualizado a 4.3 y necesito aplicar migraciones, pero hay varios casos de uso que debo cubrir:

Un nuevo desarrollador necesita la base de datos creada desde cero con datos semilla. (LosSeed() método también aplica algunos índices únicos.)El entorno de producción solo necesita los cambios no aplicados aplicados. (Pero tenga en cuenta que esta base de datos se creó en EF 4.1, que no tiene migraciones).

¿Cómo creo las migraciones y un inicializador (o inicializadores) para cubrir ambos casos?

Tu respuesta

1   la respuesta
27

Ya que su base de datos de producción fue creada con EF 4.1, necesitará hacer un poco de trabajo para prepararla para su uso conMigraciones. Comience con una copia de su código de producción actual ejecutándose en un entorno de desarrollo.Asegúrese de que la base de datos dev no existe.

Actualice el proyecto para usar EF 4.3 (o posterior) con Migraciones y cree la migración inicial para obtener una instantánea del aspecto actual de la producción.

Update-Package EntityFramework
Enable-Migrations
Add-Migration InitialCreate  

Reemplace los inicializadores de su base de datos con el código de Migraciones correspondiente.

Para datos semilla, agréguelos a laSeed() método de laMigrations\Configuration.cs expediente. Tenga en cuenta que a diferencia de laSeed() método en los inicializadores, este método se ejecuta cada vezUpdate-Database se llama. Es posible que deba actualizar las filas (restablecer los datos de inicialización) en lugar de insertarlos. losAddOrUpdate() El método puede ayudar con esto.

Dado que ahora se pueden crear sus indecies únicos con Migraciones, debe agregarlos a laUp() Método de la migración de InitialCreate. Usted puede encadenarlos fuera de laCreateTable() llamadas usando elIndex() método, o llamando alCreateIndex() método.

Puedes usar elMigrateDatabaseToLatestVersion Inicializador ahora para ejecutar migraciones durante la inicialización.

Obtenga un script para arrancar su entorno de producción.

Update-Database -Script

Desde la secuencia de comandos que se genera, querrá eliminar casi todo, ya que las tablas ya existen. Las partes que necesitarás son lasCREATE TABLE [__MigrationHistory] yINSERT INTO [__MigrationHistory] declaraciones

Opcionalmente, suelta elEdmMetadata Mesa ya que ya no es necesaria.

Una vez que hagas estas cosas, deberías estar bien con Migraciones. Los nuevos desarrolladores pueden ejecutarUpdate-Database para crear la base de datos desde cero, y puede ejecutarUpdate-Database (o use el inicializador de Migraciones) contra la producción para aplicar migraciones adicionales allí.

La mayor parte de esto sigue siendo cierto en EF 5.0.0. Para convertir de migraciones automáticas a migraciones explícitas, tuve que seguir la mayoría de estos pasos. Albert Bori
Una pregunta más: ¿esto significa que tendremos que escribir migraciones nosotros mismos para migrar la base de datos de la nada al estado de producción actual? El InitialCreate está vacío cuando lo generamos. Josh Kodroff
+1 por idempotencia. Josh Kodroff
Lo siento, el proceso es tan complicado. Hicimos que sea más fácil pasar de los intitalizadores a las migraciones en 4.3; los inicializadores básicamente hacen esta parte por usted. Desafortunadamente, no había mucho que pudiéramos hacer para las personas que se actualizan a partir de 4.2 o menos. Bueno, aparte de contestar a sus preguntas de StackOverflow. ;) bricelam

Preguntas relacionadas