Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Im Artikel “EDM: Der Code First-Ansatz” haben wir uns angesehen, wie Sie auf Basis eines frisch erstellten Entity Data Models eine Datenbank samt den nötigen Tabellen erstellen können – und zwar automatisch beim ersten Zugriff auf die noch nicht vorhandene Datenbank. Nun gehen wir einen Schritt weiter und zeigen, wie Sie auch noch Änderungen am Entity Data Model auf bestehende Datenbanken mit älterem Versionsstand übertragen und somit ein kombiniertes Update von Anwendung und Datenbank ausliefern können.
Aktualisierungen am bestehenden Datenmodell
Wir haben während der Entwicklung der Anwendung, wie wir es im Artikel EDM: Der Code First-Ansatz gelernt haben, die Freiheit, nach Lust und Laune die Zieldatenbank zu löschen und neu zu erstellen. Wohlgemerkt: während der Entwicklung! Sobald die Datenbank jedoch einmal mit Daten gefüllt ist oder sogar beim Kunden läuft, wollen Sie Aktualisierungen am Datenmodell sicher etwas eleganter und ohne Datenverlust übermitteln. Auch dazu bietet Code First Möglichkeiten.
Um Migrationen mit Code First durchzuführen, also die Änderungen erst am bestehenden Modell der Entitäten durchzuführen und diese dann auf die Tabellen der Datenbank zu übertragen, müssen wir zunächst die Migrationsfunktion aktivieren.
Dazu benötigen wir die Paket-Manager-Konsole, die Sie mit dem Menübefehl Ansicht|Weitere Fenster|Paket-Manager-Konsole einblenden. Ist dieser eingeblendet, wählen Sie oben rechts unter Standardprojekte den Namen des betroffenen Projekts aus, in diesem Fall CodeFirst. Dann geben Sie den folgenden Befehl ein:
PK> enable-migrations
Das Ergebnis finden Sie in Bild 1 vor.
Bild 1: Aktivieren der Migrationsfunktion
Im Projekt haben sich nun einige Änderungen ergeben, die Sie direkt im Projektmappen-Explorer ablesen können. Dort finden Sie nun nämlich einen neuen Ordner namens Migrations (siehe Bild 2). Dieser enthält eine Datei namens Configuration.vb.
Bild 2: Die neue Konfigurationsdatei
Diese Datei enthält vor allem die Seed-Methode. Dieser können Sie Anweisungen zum Schreiben von Daten in die Tabellen der Datenbank hinzufügen. Die Seed-Methode wird später beim Update des Datenbank-Backends ausgelöst. Deshalb fügen wir beispielsweise die folgenden Codezeilen zu dieser Methode in der Klasse Configuration.vb hinzu:
Namespace Migrations Friend NotInheritable Class Configuration Inherits DbMigrationsConfiguration(Of Wordgenerator) Public Sub New() AutomaticMigrationsEnabled = False ContextKey = "CodeFirst.Wordgenerator" End Sub Protected Overrides Sub Seed(context As Wordgenerator) Dim anrede As New Anrede With {.Bezeichnung = "Herr"} context.Anreden.AddOrUpdate(Function(p) p.Bezeichnung, anrede) anrede = New Anrede With {.Bezeichnung = "Frau"} context.Anreden.AddOrUpdate(Function(p) p.Bezeichnung, anrede) anrede = New Anrede With {.Bezeichnung = "Firma"} context.Anreden.AddOrUpdate(Function(p) p.Bezeichnung, anrede) End Sub End Class End Namespace
Damit wollen wir sicherstellen, dass zumindest die grundlegenden Daten der Anwendung, nämlich die Anreden, bereits in die Tabelle Anreden geschrieben werden – hier also die Datensätze mit den Werten Herr, Frau und Firma im Feld Bezeichnung.
Anschließend geben Sie einen weiteren Befehl in den Bereich Paket-Manager-Konsole ein (siehe Bild 3):
Bild 3: Initiale Migration