8

Ho un problema per il quale non sono riuscito a trovare una risposta per il Web.EF 4.3 Migrazione - come produrre uno script di downgrade?

Sto usando CodeFirst EF 4.3.1 Migrazioni con MsSQL.

Ho aggiunto diverse migrazioni e ora voglio produrre uno script per l'aggiornamento/downgrade tra due migrazioni.

Per l'aggiornamento si esegue il seguente comando che riproduce con successo uno script di aggiornamento:

PM> Update-Database -Script -SourceMigration:"201205161144187_AddPostAbstract" -TargetMigration:"201205161203310_BlogLimitsAndTableRename" 

Tuttavia, per downgrade corro il seguente comando che non riesce con il seguente errore:

PM> Update-Database -Script -SourceMigration:"201205161203310_BlogLimitsAndTableRename" -TargetMigration:"201205161144187_AddPostAbstract" 
Scripting the downgrade between two specified migrations is not supported. 

Tutte le idee come posso generare uno script di downgrade?

Grazie.

risposta

10

Sembra che l'API di migrazione si aspetti che si desideri eseguire il downgrade solo da "ultima versione".

Se BlogLimitsAndTableRename è la vostra più recente migrazione (l'ultima applicata) è possibile eseguire semplicemente:

Update-Database -Script -TargetMigration:"201205161144187_AddPostAbstract" 

Se non è l'ultima della migrazione è necessario ripristinare il database di sviluppo ad esso prima:

Update-Database -TargetMigration:"201205161203310_BlogLimitsAndTableRename" 

e ora dovresti essere in grado di utilizzare il primo comando per ottenere uno script.

+0

Ha senso. Immagina di avere un database nello stato 5 e tenterai di ottenere uno script per il downgrade da 4 a 3. Quindi il database può essere facilmente danneggiato. O puntandolo a db veramente nello stato 4 o avendo uno spinto localmente nello stato 4 ti fa pensare a questo prima di fare un pasticcio irreversibile. OTOH potrebbe essere supportato con alcuni -Force switch o big red warning. :) –

+1

Ho pensato di avere un database nello stato 5 e ora ottenere uno script per il downgrade da 5 a 2. La migrazione EF mi obbliga a eseguire il downgrade da 5 a 4, quindi a eseguire il downgrade da 4 a 3 e da 3 a 2, mentre tutto ciò che desidero è produrre un singolo script che contenga già tutti questi downgrade senza la necessità di eseguirli realmente. (Ad esempio, per l'aggiornamento è possibile avere un database nello stato 5 e produrre uno script di aggiornamento da 2 a 5). – mayash

+0

Oppure è possibile avere un database nello stato 5 e produrre uno script di aggiornamento da 2 a 4. – mayash