2012-02-13 8 views
30

Estamos utilizando el primer enfoque de base de datos con EntityFramework. Tenemos varios clientes, y cuando implementamos una nueva versión de producto, ahora estamos aplicando los cambios al esquema de DB "manualmente" con herramientas como SQL Compare.EF Migrations for Database-first approach?

¿Hay alguna forma de cómo EF Migrations podría ayudar a aplicar cambios a los clientes DB automáticamente?

+0

por supuesto, no estoy dispuesto a perder nada, la función Code First Migration parece preservar los datos, quiero algo similar para DB primero. De hecho, esto lo quiero para escenarios simples: nuevas tablas agregadas, campos nuevos, etc. – Shaddix

+0

Si desea una funcionalidad similar a EF Migrations utilizando primero la base de datos, consulte [FluentMigrator] (https://github.com/fluentmigrator/fluentmigrator) –

Respuesta

14

Hasta donde yo sé, EF Migrations es un producto dirigido a CodeFirst y no es compatible con las operaciones de Database First.

CodeFirst asume que nunca hará ningún cambio manualmente a la base de datos. Todos los cambios en la base de datos pasarán por el código primeras migraciones.

+3

Gracias , parece que los scripts de actualización son la única manera de ir con EF actualmente ... – Shaddix

+4

Una buena alternativa podría ser proyectos de bases de datos/SSDT y hacer comparaciones de esquemas. –

2

¡Creo que sí! Debes continuar tu camino a través del código primero.

Para ello, Suponga que tiene la siguiente DbContext que EF Db crea por primera vez para usted:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("Name=DefaultConnection") 
    { 

    } 

    // DbSets ... 
} 

cambio que a la siguiente para empezar a utilizar el código primero y todas las herramientas mágicas de la misma (migración, etc. .):

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("YourDbFileName") 
    { 

    } 

    // DbSets ... 
} 

Esto causa que EF crea una nueva cadena de conexión utilizando SQL Express en el equipo local en su archivo web.config con el nombre YourDbFileName, algo que al igual que a principios del DefaultConnection Db crea por primera vez.

Todo lo que necesita para seguir su camino es que edite el ConStr de YourDbFileName de acuerdo con su servidor y otras opciones.

Más información here y here.

0

Sólo tienes que buscar el objeto hijo DbContext y buscar este método:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     throw new UnintentionalCodeFirstException(); 
    } 

Si usted comenta esto:

throw new UnintentionalCodeFirstException(); 

entonces la excepción no sería arrojado en operación de migración. Como se puede imaginar, la migración busca esta parte para saber cuáles son las configuraciones para cada entidad con qué tabla o tablas.

Disculpa si no fui con más detalles, si deseas más, estaremos encantados de editar esto y hacerlo mejor!

Cuestiones relacionadas