Ich verwende Entity Framework 4.3 Migrationen in meinem Projekt. Ich möchte automatische Migrationen verwenden, damit meine Datenbank beim Ausführen des Projekts automatisch aktualisiert wird, wenn ich Änderungen an meinen Domänenobjekten und meiner Kontextklasse vornimmt. Ich arbeite so weit.
Ich möchte auch einige hinzugefügte Migrationen zusätzlich zu den automatischen Migrationen verwenden und möchte, dass die Anwendung automatisch auf die neueste Version springt (basierend auf meinen hinzugefügten Migrationen), wenn ich die Anwendung ausführe.
Um dies zu tun, habe ich dies in der global.asax Datei ...
platziert %Vor%Jetzt funktioniert das, aber wenn ich das mache, aktualisiert es nicht mehr automatisch die Datenbank basierend auf meinen Domain-Objekten.
Ich möchte in der Lage sein, die Datenbank vollständig zu löschen und dann die Anwendung auszuführen und alle automatischen Migrationen ausführen zu lassen und dann meine expliziten Migrationen auszuführen und die Datenbank auf die neueste Version zu bringen.
Ich weiß, dass dies in einem früheren Projekt funktioniert hat, aber ich bin mir nicht sicher, was ich in diesem Fall falsch mache.
Danke
Sie müssen eine Konfiguration übergeben, bei der die Eigenschaft AutomaticMigrationsEnabled im Konstruktor auf true festgelegt ist. So etwas sollte helfen:
%Vor%mit MyConfiguration ist etwas wie:
%Vor%
HAFTUNGSAUSSCHLUSS: Ich habe das gerade gehackt, daher sind möglicherweise kleine Anpassungen nötig, um das kompilieren zu können
Gerade mit EF 4.3.1 überprüft und der Code ist so für den Initialisierer:
%Vor%und dies für die Konfigurationsklasse:
%Vor%Nachdem ich mehrere Stunden lang mit dem Kopf darauf gestoßen bin, habe ich schließlich eine Lösung gefunden, die die Datenbank erstellt, wenn nötig oder sie aktualisiert, wenn sie veraltet ist. Wir verwenden diese Technik in Gallery Server Pro, um die erstmalige Installation zu erleichtern oder frühere Versionen zu aktualisieren.
%Vor%Ich habe einen Blogpost mit ein paar weiteren Details geschrieben: Verwenden von Entity Framework-Code Erste Migrationen zu automatische Erstellung und automatische Aktualisierung einer Anwendung
Hier ist meine aktuelle Lösung, mit der ich nicht ganz zufrieden bin.
%Vor%Ich erstelle eigentlich zwei verschiedene Initialisierer. Die erste, die CreateDatabaseIfNotExists verwendet, durchläuft erfolgreich Tabellen und erstellt sie basierend auf meinen Domain-Objekten. Die zweite, die MigrateDatabaseToLatestVersion verwendet, führt alle meine expliziten Migrationen aus.
Ich mag es nicht, weil automatische Migrationen grundsätzlich deaktiviert sind. Um mein Domänenmodell hinzuzufügen oder zu ändern, muss ich die Datenbank komplett löschen und neu erstellen. Dies wird nicht akzeptabel sein, sobald ich die Anwendung in die Produktion verschoben habe.
Wenn Ihre Anwendung die Klasse Startup.cs enthält, können Sie die DbMigrator-Klasse wie folgt verwenden Gehe in deinen App_Start-Ordner und öffne Startup.Auth Fügen Sie diese Codezeilen innerhalb der ConfigureAuth-Methode
ein %Vor%HINWEIS: Denken Sie daran, diesen Namespace zu verwenden, indem Sie System.Data.Entity.Migrations;
verwenden
Dies bedeutet, dass Ihre Datenbank bei jedem Start der Anwendung auf die neueste Version aktualisiert wird.
Die gleiche Lösung, die Roger gemacht hat, aber einen statischen Konstruktor auf dem DbContext verwendet. Vollständiger Code unten .... dies ermöglicht es dem Initialisierungscode, in der Klasse selbst zu leben und wird bei der ersten Instantiierung der DataDbContext-Klasse selbst aufgerufen.
%Vor%Wir können sehen, dass die Seed-Methode immer wieder ausgeführt wird. Wir können dies vermeiden, indem wir prüfen, ob eine Migration bereits existiert, da eine automatisch angewendet wird, wenn die Datenbank erstellt wird. Dann können wir die DataDbConfiguration wie folgt umgestalten ...
%Vor%Tags und Links asp.net-mvc-3 c# entity-framework ef-migrations