5

Ho abilitato le migrazioni per la mia applicazione framework entità. Ora, voglio aggiornare il mio database sul mio server remoto. Ho eseguito questo comando:Entity framework and migrations - come aggiornare il mio database sul server remoto?

PM> Update-Database -Script 

Quindi ha generato uno script sql. Ma questo script ha tutti i metadati che ho effettivamente nel mio database, e non le modifiche che sono state apportate; così, quando provo a eseguire questo script sql sul mio server remoto, si dice che le tabelle esistono già.

Come posso generare script sql, che conterrà solo gli aggiornamenti necessari?

risposta

7

È possibile targetizzare una migrazione specifica per questo. Se si dispone di una migrazione chiamato Foo, ad esempio:

Update-Database -TargetMigration Foo -Script 

verrà generato uno script di migrazione per la migrazione Foo. Sostituisci Foo con qualsiasi migrazione tu debba eseguire su quel server.

Add-Migration InitialMigration 
Add-Migration AddCustomers 
Add-Migration AddProjects 

Diciamo che avere le tre migrazioni nel progetto, e il vostro database locale ha tutti loro applicate, ma il database remoto ha solo InitialMigration. È possibile eseguire il seguente:

Update-Database -SourceMigration InitialMigration -TargetMigration AddProjects -Script 

Questo vale due migrazioni sul server remoto (AddCustomers e AddProjects).

+0

Ho appena attivato le mie migrazioni, quindi non ho alcuna migrazione di destinazione, devo prima aggiornare il mio db locale per ottenerlo? – ojek

+0

Se non si dispone di alcuna migrazione, cosa esattamente si sta tentando di applicare? – Dismissile

+0

La modifica è stata deselezionata. Grazie per le informazioni! :) – ojek

1

Se si ha accesso tramite desktop remoto al server è possibile eseguire lo strumento di migrazione della riga di comando che di solito si trova in [projectFolder] /packages/EntityFramework.5.0.0/tools/migrate.exe

E chiamare in questo modo:

Migrate.exe [StartupProjectName] /StartupDirectory:"[BIN folder path]" /ConnectionStringName:"[Connection String Name]" /StartupConfigurationFile:"[Path to web or app.config]" 
1

è possibile utilizzare il MigrateDatabaseToLatestVersion Initializer per applicare automaticamente eventuali nuove migrazioni quando si distribuisce una nuova versione della propria applicazione:

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