2015-07-27 24 views
7

Ho un'applicazione Web che installo sui computer dei miei clienti per il loro uso interno. Utilizzo C# MVC5 e Entity Framework code-first. Ho usato la migrazione automatica = true ma mi sono fermato e l'ho impostato su false. L'ho installato su un ambiente di produzione (release) - con un pacchetto deploy (senza Visual Studio).Database di downgrade (rollback) con codice prima nell'ambiente di produzione

Ho un cliente con l'applicazione - versione 1. Ora voglio eseguire l'aggiornamento alla versione 2. Voglio abilitare l'aggiornamento del DB dell'app (nel file di produzione, con l'installazione CMD da un pacchetto), ma per avere il possibilità di downgrade il DB se ci saranno problemi - ma senza cancellare le righe esistenti.

Ad esempio, se ho una tabella "Articoli" e Articoli ha Key, Name, Location. In fase di aggiornamento aggiungo una nuova colonna: Email. In caso di downgrade, la nuova colonna verrà eliminata. ho creato la migrazione su Visual Studio ho ottenere questo codice (E 'solo per l'esempio - ho più migrazioni):

public partial class AddEmail : DbMigration 
    { 
     public override void Up() 
     { 
      AddColumn("dbo.Items", "Email", c => c.String()); 
     } 

     public override void Down() 
     { 
      DropColumn("dbo.Items", "Email"); 
     } 
    } 

Ora, ho installato la nuova versione della App sulla versione esistente e ha funzionato bene - il è stata aggiunta una nuova colonna e ha funzionato con il nuovo codice. Ho aggiunto alcuni articoli (righe).

Ora, come posso reinstallare la versione precedente in modo che la nuova colonna venga eliminata? In realtà voglio eseguire il rollback delle nuove migrazioni, ma non voglio perdere le nuove righe, ma solo le nuove colonne.

risposta

0

È possibile downgrade a una migrazione specifica utilizzando questa tecnica: https://msdn.microsoft.com/en-us/data/jj591621.aspx#specific

Tenete a mente che richiede una migrazione bersaglio così si dovrebbe configurare una fotografia istantanea della linea di base del database usando Aggiungi alla migrazione -IgnoreChanges iniziali (vedi https://msdn.microsoft.com/en-us/data/dn481501.aspx) In caso contrario, utilizzare -TargetMigration Update-database: 0

Quando si rollback sarà abortire se i dati esiste nelle colonne, quindi potrebbe essere necessario fare Update-Database -Force

+0

Dal momento che non ho Visual Studio sul computer del cliente, non mi è stato d'aiuto, ma nella prossima sezione di questo articolo c'è un titolo "Ottenere uno script SQL" - e questo è esattamente ciò di cui avevo bisogno. Grazie! – TamarG

13

in this article c'è una spiegazione su come creare un scr che migrano da una migrazione all'altra - upgrade o downgrade. così mi sono imbattuto nella console di Package Manager -

Update-Database -Script -TargetMigration: MyMigration1

e ottenuto lo script SQL.

Avevo bisogno di esaminarlo un po 'e poi l'ho appena eseguito sul Database di produzione per eseguire il downgrade del DB.