62

Quando eseguo PM> Remove-Migration -context BloggingContext in VS2015 con un progetto ASP.NET core utilizzando EF Nucleo ottengo il seguente errore:Come unapply una migrazione in ASP.NET core con EF Nucleo

System.InvalidOperationException: The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration. at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force) 
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.<Configure>b__0() 
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args) 
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args) 
The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration. 

Come posso annullare l'applicazione che ? Sto usando l'ultima versione di ASP.NET core 1.0, EF Core e VS2015 Aggiornamento 3.

+0

prova ad aggiungere '-force' al fine – prospector

risposta

75

Usa dotnet ef database update <previous-migration-name>

quindi provare a rimuovere l'ultimo migrazione.

La rimozione della migrazione senza aggiornamento del database non funziona perché sono state applicate modifiche al database.

+2

Sto ancora ricevendo lo stesso errore. Ho usato per la prima volta 'dotnet ef database update MyFirstMigration --context BloggingContext' che ha funzionato con successo. Quindi ho eseguito le migrazioni '' dotnet ef 'rimuovono --context BloggingContext' che mi ha dato lo stesso messaggio di errore del mio post – nam

+5

Prima di eseguire il comando 'MyFirstMigration', devi eseguire l'aggiornamento alla migrazione. Se questa è la prima migrazione (come suggerisce il nome), è possibile utilizzare 'dotnet ef database update 0' per ripristinare (in modo non corretto) tutte le migrazioni dal database. Dovresti quindi essere in grado di eseguire 'dotnet ef migrations remove'. – bvpb

+0

Inoltre, vale la pena notare che è necessario utilizzare solo il nome della migrazione, escluso il prefisso data – Structed

28

È ancora possibile utilizzare il comando Update-Database.

Update-Database -Migration <migration name> -Context <context name> 

Tuttavia, a giudicare dal nome della migrazione Sto assumendo che sia la prima migrazione in modo che il comando non può funzionare. Dovresti essere in grado di eliminare la voce dalla tabella __MigrationHistory nel tuo database e quindi eseguire nuovamente il comando Remove-Migration. Puoi anche eliminare il file di migrazione e ricominciare da capo.

+0

È possibile richiamare "Update-Database" dalla console di gestione pacchetti o richiamare "aggiornamento del database dotnet ef" dal prompt dei comandi dalla directory del progetto . – kimbaudi

+3

Giusto per chiarire la risposta di Brad qui - " dovrebbe essere il nome della migrazione che si desidera * tornare a * (vale a dire probabilmente la migrazione * prima * quella che si è rovinato), non il nome della migrazione vuoi annullare. –

45

Per rimuovere completamente tutte le migrazioni e ricominciare tutto da capo, effettuare le seguenti operazioni:

dotnet ef database update 0 
dotnet ef migrations remove 
+0

Ma non si desidera rimuovere tutte le migrazioni. Ad esempio, si desidera mantenere la migrazione predefinita che VS crea per l'identità (Account utente) nella cartella Data \ Migrations. – nam

+0

È utile sapere 'dotnet ef database update 0', ma l'esecuzione di' dotnet ef migrations remove' in seguito rimuoverà la migrazione predefinita per Identity, che potrebbe non essere desiderata. – kimbaudi

+0

Grazie per il suggerimento su 'dotnet ef aggiornamento del database 0'! Non avevo visto questo menzionato da nessuna parte ... –

14

Per "unapply" la maggior parte (recente?) La migrazione dopo che è già stato applicato al database:

  1. Aprire l'Esplora oggetti di SQL Server (Visualizza -> "Esplora oggetti di SQL Server")
  2. Passare al database collegato al progetto espandendo i piccoli triangoli sul lato.
  3. Espandi "Tabelle"
  4. Trova la tabella denominata "dbo._EFMigrationsHistory".
  5. Fare clic con il tasto destro su di esso e selezionare "Visualizza dati" per vedere le voci della tabella in Visual Studio.
  6. Eliminare la riga corrispondente alla migrazione che si desidera annullare (Dire "sì" all'avviso, se richiesto).
  7. Eseguire "migrazioni dotnet ef rimuovi" nella finestra di comando della directory contenente il file project.json. In alternativa, eseguire il comando "Rimuovi-Migrazione" nella console del gestore pacchetti.

Spero che questo aiuti ed è applicabile a qualsiasi migrazione nel progetto ... ho provato questo fuori solo per la migrazione più recente ...

codifica Felice!

+2

Questo in realtà non si applica la migrazione, basta fare in modo che il framework "pensi" che non sia stato applicato. Se lo fai, il tuo database sarà incoerente. –

3

Per rimuovere l'ultima migrazione è stato applicato in base al docs usare il comando:

dotnet ef migrations remove 

Questo comando deve essere eseguito dal prompt dei comandi sviluppatore (how to open command prompt) all'interno della vostra directory di soluzione.

Ad esempio se l'applicazione si trova nel nome "Applicazione" e si trova nella cartella c: \ Progetti.Allora il vostro percorso deve essere:

C:\Projects\Application 
1

Per annullare l'applicazione una migrazione in EF core 1.0 utilizzare il comando:

aggiornamento del database dotnet ef {migration_name}

Utilizzare il nome della migrazione della migrazione fino che vorresti preservare le tue modifiche. L'elenco dei nomi della migrazione può essere trovata utilizzando:

dotnet lista migrazioni ef