2012-02-25 8 views
32

Quindi sono riuscito a far funzionare Code First e funziona benissimo.Prima migrazione del codice con stringhe di connessione

Poiché sto ancora sviluppando l'applicazione, la struttura del database non è finalizzata e quindi devo implementare le migrazioni.

Ho seguito il Official Blog Post e ho ottenuto il comando Update-Database funzionante.

Tuttavia, questo aggiorna solo la versione di SQLExpress del database. La versione di produzione del database si trova su Azure e si specifica la stringa di connessione in fase di esecuzione in modo che il comando Update-Database non funzioni.

Quindi la mia ultima domanda è: come posso applicare le migrazioni automatiche al database di produzione la cui stringa di connessione è specificata in fase di runtime?

+0

Per coloro che verificano NO app.config e non utilizzano la console PM, vedere questo post http://stackoverflow.com/questions/15504465/entityframework-code-first-custom-connection-string-and-migrations/16133150# 16133150 –

risposta

49

Sul tipo di console gestore di pacchetti:

Get-Help Update-Database

parte Rilevante:

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com 
monParameters>] 

modo da poter fare un Update-Database -ConnectionStringName "MyConnectionString" e dovrebbe funzionare come un fascino.

Si dispone anche di un inizializzatore del database MigrateDatabaseToLatestVersion, se lo si imposta (tramite Dabase.SetInitializer()), quando si distribuisce l'app in produzione con una stringa di connessione corretta, in primo accesso deve migrare automaticamente il file db alla versione più recente.

Suggerisco comunque di cautela, sempre di backup.

Aggiornamento

@Alexy Strakh recenti commenti generato un altro argomento vale la pena mettere nella risposta.

Configurare correttamente un sistema di distribuzione utilizzando Code First Migrations, dato 2 ConnectionString s.

  1. Definire le stringhe di connessione in web.config (prod e dev), con password di default
  2. avere il sistema di configurazione dell'applicazione conoscere le configurazioni di prod e di collegamento dev, opzionalmente costruire unit test per garantire la a destra si è scelto *
  3. Impiegare config file transformation e farlo trasformare il vostro web.config in quello con valori di produzione
  4. distribuisce il pacchetto alla produzione (this should be the most cutting edge way)

Non si deve interagire con l'ambiente di produzione dalla propria casella di sviluppo, ma se è necessario fare il , trasformarlo in una soluzione temporanea che deve essere ripristinata non appena finito.

Un'altra opzione è utilizzare semplicemente Web.Debug.config e Web.Release.config e disporre di un modello centrale per il web.config principale (che sarebbe l'unico a cui si esegue il check-in nel controllo sorgente).

Assicurati di non controllare mai le password di produzione o di sviluppo personale (se qualsiasi).

* È possibile utilizzare il simbolo DEBUG per verificare come l'applicazione è in esecuzione.

+0

Ho un database dev specificato nella mia web.config predefinita e nella connessione db prod specificata su web.release.config. Voglio usare prod invece di dev, posso farlo? –

+0

Sì, con tutti i mezzi, ma ricordate che NON è responsabilità del framework di entità (o di qualsiasi tecnologia di storage) essere a conoscenza della vostra logica di configurazione per dev/staging/produzione. Penso che quello che ti serve è la trasformazione del file di configurazione. https://msdn.microsoft.com/en-us/library/dd465318%28v=vs.100%29.aspx – WDRust

+0

Cioè, assumendo che tu voglia percorrere questa strada. Se hai ulteriori dettagli o requisiti dovresti fare un'altra domanda (sentiti libero di darmi un ping) – WDRust