Migrationen in EF Core zurückrollen
- Matt
Nach dotnet ef database update landet man meistens bei der neuesten Migration.
Weniger bekannt: derselbe Befehl nimmt auch den Namen einer älteren Migration
entgegen und rollt bis dahin zurück, dotnet ef database update AddCustomerTable
etwa. EF Core führt dazu für jede dazwischenliegende Migration die Down()-Methode
rückwärts aus. Für die komplette Rückkehr zum leeren Schema gibt es die
Kurzform dotnet ef database update 0.
Der Haken: Down() ist nur so gut wie das, was beim Erstellen der Migration
generiert oder von Hand nachgetragen wurde. Wurde eine Spalte per Skript
umbenannt oder eine Migration nachträglich angepasst, ohne das Gegenstück in
Down() zu pflegen, rollt der Befehl zwar durch, aber nicht dorthin, wo man
es erwartet. Bei Datenverlust-Operationen wie DropColumn hilft vorher ein
Blick in dotnet ef migrations script mit vertauschtem from und to, um zu
sehen, welches SQL tatsächlich läuft, bevor es eine echte Datenbank trifft.
Quelle: Applying Migrations – EF Core