Ich habe die folgende Situation und kann die korrekte Migrationsstrategie nicht bestimmen. Hilfe ist zu schätzen.
Nun möchte ich den ersten Ansatz des EF-Codes verwenden. Was ich erreichen muss, ist:
Datenbank existiert nicht ==== & gt; Erstellen Sie EF Initial ===== & gt; Upg v1 ===== & gt; Upg V2
Datenbank existiert ===== & gt; Initial überspringen, aber für die nächsten Upgrades bereit sein ===== & gt; Upg v1 ====== & gt; Upg v2
Danke für Ihre Hilfe
Zusätzliche Informationen: Dies ist eine existierende Datenbank (nur ein Beispiel):
%Vor%Beim Reverse Engineering hat EF eine erste Migration erstellt:
%Vor%Wenn ich den von @spender zur Verfügung gestellten Code gegen eine nicht vorhandene Datenbank verwende, ist alles cool. Wenn ich es gegen eine existierende Datenbank verwende, funktioniert es, bis ich das Modell (nächste Migration) ändere.
Was ich gesehen habe, ist, dass das von der Migration zurückgegebene Upgrade-Skript die gesamte Datenbankerstellung enthält. Und kann nicht gegen bereits vorhandene Objekte ausgeführt werden.
Was tatsächlich funktioniert, ist, die Migrationstabelle zur vorhandenen Datenbank hinzuzufügen und Anfangsdaten hinzuzufügen, aber ich bin nicht sicher, ob dies eine gute Lösung ist.
Das hat eine ganze Weile gedauert, bis ich es herausgefunden habe, also bin ich froh, es hier zu teilen.
Zuerst müssen Sie Ihre Datenbank zurückentwickeln. Entity Framework Power Tools können dies für Sie tun. Sobald es installiert ist, in Ihrem Projekt installieren Sie EF mit Nuget, klicken Sie mit der rechten Maustaste auf den Projektknoten im Solution Explorer, dann Entity Framework
- & gt; %Code%. Dies wird eine ganze Reihe von Modellklassen und Mapping-Klassen zu Ihrem Projekt generieren.
Als Nächstes in der Package Manager-Konsole
%Vor%dann
%Vor%zum Erstellen einer Migration, die den Übergang von der leeren Datenbank zum aktuellen Schema beschreibt.
Bearbeiten Sie nun den generierten Reverse Engineer Code First
-Klassenkonstruktor:
Als nächstes, beim Start der App, (also vielleicht in global.asax Configuration.cs
, wenn Sie von einem Webserver aus arbeiten), müssen Sie Migrationen auslösen. Diese Methode erfüllt die Aufgabe:
Jetzt können Sie wie üblich weitere Migrationen hinzufügen. Wenn diese Migrationen nicht ausgeführt wurden, werden sie bei der Ausführung der App angewendet, wenn Application_Start
aufgerufen wird.
Jetzt sind Sie richtig in der EF-Code-First-Falte. Ich glaube, das hast du gefragt, oder?
Tags und Links sql-server c# entity-framework database