2012-02-13 13 views
30

Utilizziamo il primo approccio del database con EntityFramework. Abbiamo diversi clienti e, quando distribuiamo la nuova versione del prodotto, applichiamo le modifiche allo schema DB "manualmente" con strumenti come SQL Compare.EF Migrations for Database -approccio?

Esiste un modo in cui la migrazione EF può contribuire ad applicare automaticamente le modifiche al DB clienti?

+0

ovviamente, non sono disposto a perdere nulla, la funzionalità Code First Migration sembra conservare i dati, voglio prima qualcosa di simile per DB. In realtà lo voglio per semplici scenari: nuove tabelle aggiunte, nuovi campi, ecc. – Shaddix

+0

Se vuoi funzionalità simili a EF Migrations usando prima il database, controlla [FluentMigrator] (https://github.com/fluentmigrator/fluentmigrator) –

risposta

14

Per quanto ne so, EF Migrations è un prodotto indirizzato a CodeFirst e non supporta le operazioni di Database First.

CodeFirst presuppone che non verranno apportate modifiche manualmente al database. Tutte le modifiche al database passeranno attraverso le prime migrazioni del codice.

+3

Grazie , sembra che gli update-scripts siano l'unico modo per andare con EF al momento .. – Shaddix

+4

Una buona alternativa potrebbe essere progetti di database/SSDT e fare confronti tra diversi schemi. –

2

Penso che ci sia! Devi prima passare attraverso il codice.

A tale scopo, Supponiamo di avere il seguente DbContext che EF Db creato prima per voi:

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

    } 

    // DbSets ... 
} 

cambiamento che a quanto segue per iniziare a utilizzare il codice prima e tutti gli strumenti magici di esso (migrazione, ecc .):

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

    } 

    // DbSets ... 
} 

Essa provoca che EF crea una nuova stringa di connessione utilizzando SQL Express sul computer locale nel file web.config con il nome YourDbFileName, qualcosa proprio come agli inizi del DefaultConnection Db prima creato.

Tutto ciò che potrebbe essere necessario per continuare la tua strada, è quello di modificare YourDbFileName ConStr in base al tuo server e altre opzioni.

Ulteriori informazioni here e here.

0

Basta guardare per il vostro oggetto figlio DbContext e potete trovare questo metodo:

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

Se si commento a questo:

throw new UnintentionalCodeFirstException(); 

quindi l'eccezione non sarebbe stato gettato sulla operazione di migrazione. Come puoi immaginare, la migrazione cerca questa parte per sapere quali sono le configurazioni per ogni entità con quale tabella o tabella.

Scusate se non sono andato con ulteriori dettagli, se volete di più, sarò felice di modificare questo e renderlo migliore!

Problemi correlati