2012-05-15 19 views
12

Tengo un sistema en producción que fue creado con Entity Framework 4.1 Code First. Ahora, me actualicé a 4.3 y necesito aplicar migraciones, pero hay varios casos de uso que necesito cubrir:¿Cómo usar las migraciones en una base de datos existente en producción creada con Entity Framework 4.1?

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

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

Respuesta

27

Dado que su base de datos de producción se creó con EF 4.1, necesitará hacer un poco de trabajo para que esté lista para su uso con Migrations. 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 exista.

  1. Actualiza el proyecto de utilizar EF 4.3 (o posterior) con las migraciones y crear la migración inicial a la producción instantánea de lo que se ve actualmente similares.

    Update-Package EntityFramework 
    Enable-Migrations 
    Add-Migration InitialCreate 
    
  2. reemplazar su inicializadores de base de datos se combina con el código de migraciones.

    Para los datos de inicialización, agréguela al método Seed() del archivo Migrations\Configuration.cs. Tenga en cuenta que, a diferencia del método Seed() en los inicializadores, este método se ejecuta cada vez que se llama al Update-Database. Puede ser necesario actualizar las filas (restablecer los datos de inicialización) en lugar de insertarlas. El método AddOrUpdate() puede ayudar con esto.

    Dado que sus indecies únicas ahora se pueden crear con Migraciones, debe agregarlas al método Up() de la migración InitialCreate. Puede encadenarlas en las llamadas CreateTable() utilizando el método Index() o llamando al método CreateIndex().

    Ahora puede usar el inicializador MigrateDatabaseToLatestVersion para ejecutar migraciones durante la inicialización.

  3. Obtenga un script para iniciar su entorno de producción.

    Update-Database -Script 
    

    A partir de la secuencia de comandos que se genera, tendrá que eliminar casi todo ya que existen aready las tablas. Las partes que necesitará son las declaraciones CREATE TABLE [__MigrationHistory] y INSERT INTO [__MigrationHistory].

  4. Opcionalmente, deje caer la tabla EdmMetadata ya que ya no es necesaria.

Una vez que hagas estas cosas, deberías ser bueno para ir con migraciones. Los nuevos desarrolladores pueden ejecutar Update-Database para crear la base de datos desde cero, y puede ejecutar Update-Database (o usar el inicializador de migraciones) para producir migraciones adicionales allí.

+0

Esto es genial! ¡Muchas gracias! –

+0

+1 por idempotencia. –

+0

Lamentamos que el proceso sea tan complicado. Hicimos más fácil pasar de los interactuantes a las migraciones en 4.3: los inicializadores básicamente hacen esta parte por ti. Desafortunadamente, no había mucho que pudiéramos hacer para las personas que actualizan de 4.2 o menos. Bueno, otros luego responden sus preguntas sobre StackOverflow. ;) – bricelam

Cuestiones relacionadas