2013-03-30 9 views
49

Voglio sapere come eseguire il comando "Aggiorna database" per un database di produzione.Codice framework entità prima - come eseguire il database di aggiornamento per il database di produzione

Il database 'Update-Database' funziona correttamente dal mio computer locale, ma come faccio a farlo funzionare per i dati di produzione?

Quindi, se apporto una modifica alla mia applicazione e poi eseguo la 'pubblicazione' tramite Visual Studio, questo funziona bene per il lato codice delle cose, ma come faccio a eseguire il comando 'Aggiorna database' per i dati di produzione .

speranza a questa domanda ha un senso ...

Grazie,

+1

Eventuali duplicati di [Uso Entity Framework (codice prima) migrazioni nella produzione] (http://stackoverflow.com/questions/10848746/using-entity-framework-code -prima-migrazioni-in-produzione) –

risposta

16

Per aggiungere su quello che ha detto già @ David ...

Personalmente, non mi fido automatic updates in scenari 'dal vivo', e io preferisco sempre amministrazione del database manuale (es. c'è un problema con permissions necessario per creare o modificare Db - per non parlare dell'hosting condiviso ecc.) - ma da quello che ho visto le migrazioni sono piuttosto solide quando si tratta di sincronizzazione (in effetti, l'unico modo per "scioglierli" normalmente è necessario rimuovere il Db e forzare l'aggiornamento completo/fresco).

Ecco un post che ho fatto qualche tempo fa su come script e synchronize database/code e orientato verso scenari di distribuzione (e quando sorgono problemi). Non si applica a te (ancora) ma qualcosa da tenere a mente.

MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"

+0

Perché così complicato? Cosa c'è di sbagliato nell'eseguire semplicemente il codice di migrazione automaticamente all'avvio dell'applicazione/utilizza il contesto per la prima volta? In che modo uno script SQL è meglio di un metodo C#? –

+1

@FlorianWinter true in condizioni ideali e scenari relativamente semplici, e se sai cosa stai facendo (ad esempio la tabella di amministrazione e migrazione db). Ma prima o poi ti capita di avere dei problemi, di uscire dalla sincronizzazione, ecc. E ci sono dati in tempo reale che non devono essere toccati a tutti i costi. Non mi fido davvero delle migrazioni o di qualsiasi inizializzatore per farlo funzionare per me. E questo deriva da una miriade di problemi che ho visto nel corso degli anni. Quindi, quando vivo dati, mi piace avere il pieno controllo. Posso far funzionare l'app e "migrare se stessa", ma solo dopo che ho ricontrollato. E ridimensionamento ecc. – NSGaga

+0

Punto preso, e sono d'accordo. Aggiungerò un avvertimento e un collegamento la tua risposta alla mia risposta, ma la lascerò lì, perché quei semplici scenari esistono. Almeno temporaneamente ... –

26

Vedi Using Entity Framework (code first) migrations in production modo che l'applicazione aggiorna automaticamente il database quando Entity Framework inizializza.

Ora, se è più comodo avere il controllo manuale sulla migrazione, è possibile utilizzare l'argomento -Script per il comando Aggiorna-database sul computer dello sviluppatore per generare script SQL che possono essere quindi eseguiti sul database di produzione.

http://msdn.microsoft.com/en-us/data/jj591621.aspx (vedere Utilizzo Una sezione SQL Script)

4

Vuoi solo automaticamente aggiornare il database alla versione più recente quando e dove mai l'esecuzione dell'applicazione (sviluppo e produzione)?

Questa potrebbe non essere una buona idea, tranne in scenari molto semplici in cui sai che puoi fidarti della migrazione automatica e la migrazione manuale dei database non è fattibile. Si prega di vedere questa risposta: https://stackoverflow.com/a/15718190/2279059. Se trascuri questo avviso, continua a leggere.

Aggiungere il seguente alla web.config:

<entityFramework> 
<contexts> 
    <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false"> 
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" /> 
    </context> 
</contexts> 

Questo può sembrare spaventoso, ma ha fondamentalmente lo stesso come il seguente codice:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>()); 

Se non avete la fortuna con web.config, allora si potrebbe anche provare a inserire questo codice in Global.asax. Personalmente preferisco la configurazione tramite il codice.

Se si desidera che il file di configurazione per look più pulito, è anche possibile derivare una nuova classe dal modello MigrateDatabaseToLatestVersion classe in modo non è necessario utilizzare la sintassi criptica per il passaggio di argomenti di tipo nel file di web.cofig:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {} 

Ciò che fa è impostare un inizializzatore del database che aggiorna automaticamente il database alla versione più recente.

(Fonte e maggiori dettagli: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html)

Problemi correlati