Entity Framework Code erste Migrationsstrategie mit bestehender Datenbank

8

Ich habe die folgende Situation und kann die korrekte Migrationsstrategie nicht bestimmen. Hilfe ist zu schätzen.

  • Anwendung erstellt und verwendet Datenbank als Datenspeicher
  • Die Anwendung muss die Datenbank beim Start aktualisieren falls erforderlich
  • mit der Nuget Manager-Konsole ist keine Option. (Für Migrationszwecke, lokal kein Problem)
  • Ich habe eine vorhandene Datenbank in der Distribution, die nicht EF
  • ist

Nun möchte ich den ersten Ansatz des EF-Codes verwenden. Was ich erreichen muss, ist:

  1. Wenn keine Datenbank, dann erstellen Sie ein
  2. Wenn die Datenbank existiert, verwenden Sie die leere Migration (nur um für die nächsten Upgrades bereit zu sein)
  3. Dies sollte beim Start der Anwendung geschehen

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.

    
Adi 21.09.2014, 09:35
quelle

1 Antwort

11

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:

%Vor%

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:

%Vor%

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?

    
spender 21.09.2014, 11:20
quelle