Entity Framework - Ricomincia - Annulla / Ripristina tutte le migrazioni


168

Per qualche ragione, le mie migrazioni sembrano essere state confuse / corrotte / qualunque cosa. Sono al punto in cui voglio solo ricominciare, quindi c'è un modo per annullare completamente tutte le migrazioni, cancellare la cronologia ed eliminare il codice di migrazione, quindi sono tornato al punto di partenza?

es.) PM> Disable-MigrationsoRollback-Migrations

Non voglio "aggiornare" a un passaggio di migrazione originale (ovvero qualcosa come una InitialSchemadestinazione) perché non riesco più a trovarlo.

Risposte:


358

Puoi eseguire il rollback a qualsiasi migrazione utilizzando:

Update-Database -TargetMigration:"MigrationName"

Se desideri ripristinare tutte le migrazioni puoi utilizzare:

Update-Database -TargetMigration:0

o equivalente:

Update-Database -TargetMigration:$InitialDatabase 

In alcuni casi è anche possibile eliminare il database e tutte le classi di migrazione.


7
come al solito, sei il migliore.
drzaus,

2
Non capisco, l'OP dice specificamente "Non voglio" aggiornare "un passaggio di migrazione originale (ovvero qualcosa come un target InitialSchema) perché non riesco più a trovarlo." In che modo questa risposta fa quello che vuole? Quello che mi sarei aspettato sarebbe successo che sarei stato in uno stato in cui dovevo farlo di enable-migrationsnuovo. Questi sono ovviamente utili, ma realizzano ciò che l'OP chiede? (Per favore, non rispondere con "beh, ha accettato la risposta." Sto cercando di capirlo, non di essere una furba).
Michael Blackburn,

@MichaelBlackburn: se si desidera eseguire enable-migrationsnuovamente e si sta sviluppando un database da zero, è sufficiente seguire l'ultima frase: eliminare il database e tutto il codice relativo alla migrazione. Se hai iniziato a utilizzare le migrazioni con un database esistente, devi prima ripristinare tutte le migrazioni utilizzando il secondo o il terzo comando, quindi elimina la MigrationHistorytabella e tutto il codice relativo alla migrazione. Dovrebbe portarti alla posizione di partenza. È inoltre possibile ottenere l'avvio del database dal backup (prima di utilizzare le migrazioni) ed eliminare tutto il codice relativo alla migrazione.
Ladislav Mrnka,

4
@MichaelBlackburn: intendevo dire che tutte le altre soluzioni che avevo visto ti dicevano di aggiornare alla tua migrazione con il nome iniziale , ma il mio problema era che non c'era una migrazione pulita iniziale da aggiornare (indietro) a - Solo voleva sbarazzarmi di tutte le migrazioni, indipendentemente dal metodo. Pertanto questa risposta ha risposto alla mia preoccupazione con-TargetMigration:0
drzaus,


8

Per essere chiari, se si utilizza LocalDb, quando si desidera iniziare da zero è sufficiente eliminare il database tramite Esplora database e digitare enable-migrations -forcela console di Gestione pacchetti. Non eliminare il database tramite la cartella App_Data o si avrà il seguente problema .


2
Fai attenzione quando esegui questa operazione poiché sovrascriverà Migrations \ Configuration.cs senza preavviso!
cgatian

Grazie per l'avvertimento, ho praticamente abbandonato il codice prima dopo un po ', è bello avere tutto il codice in una volta, posizionare, avere il controllo delle versioni del tuo database di per sé, ma non ho visto altri grandi vantaggi e sono tornati prima al database. Uso Red Gate Sql Compare per tracciare tutti i delta.
Brian Ogden,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.