Entity Framework 4.3.1 Migraciones: habilite la migración automática y cree una nueva base de datos al mismo tiempo

He jugado con las migraciones de Entity Framework 4.3 durante algún tiempo, pero tengo problemas para lograr el siguiente comportamiento: en caso de que mi código se ejecute en una base de datos existente, quiero que la base de datos se migre automáticamente a la última versión, pero en caso de que la base de datos no existe, la base de datos debe crearse automáticamente a partir de las migraciones.

Creo que los problemas están relacionados con la primera migración que creas. Si crea la primera migración usando el parámetro -IgnoreChanges (o los elimina manualmente como se explica aquí: http://thedatafarm.com/blog/data-access/using-ef-migrations-with-an-existing-database/), no podrá usar migraciones para crear una nueva tabla usando la clase DbMigrator. porque no tienes la migración inicial. Si crea la primera migración sin utilizar -IgnoreChanges, la migración de la base de datos existente no será posible. ¿Alguien tiene alguna solución para este problema?

preguntado el 04 de julio de 12 a las 10:07

1 Respuestas

Entonces, ¿tiene una base de datos existente y desea usar migraciones en esa base de datos y, al mismo tiempo, desea admitir la creación de bases de datos mediante migraciones en caso de una nueva implementación?

Parece un caso de uso poco compatible. El más simple en este caso (no probado) sería la compilación condicional o la migración condicional impulsada por alguna clave AppSettings. Significa crear una migración inicial como si no tuviera la base de datos y modificar el método Up para:

public override void Up() {
    if (ConfigurationManager.AppSettings["NewDatabaseRequired"] == "true") {
        // Here is generated content
    }
}

or

public override void Up() {
#if NewDatabaseRequired
    // Here is generated content
#endif
}

Hay muchas otras opciones más complicadas, como crear secuencias de comandos en su base de datos actual, modificar la secuencia de comandos para finalizar si ya existen tablas, agregar una secuencia de comandos como recurso a su ensamblaje de migración y ejecutar la secuencia de comandos en el Up método generado con -IgnoreChanges.

Como otra opción, puede abrir una conexión de base de datos adicional y verificar si las tablas de la migración ya existen (al consultar sys.tables ver en SQL Server). Esto no necesitará script generado.

Respondido 04 Jul 12, 17:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.