webentwicklung-frage-antwort-db.com.de

Wie synchronisiere ich ein Modell, nachdem ich Code First aus einer Datenbank mit Entity Framework 6.1 und MVC 5 verwendet habe?

Annahmen

  • Verwenden von EF 6.1, MVC 5, VS 2013, C #

  • Ich habe ein vorhandenes Datenbankmodell in Toad DM für SQL Server und es ist sehr wichtig, es immer auf dem neuesten Stand zu halten

Schritte und Notizen

  1. Unter Verwendung des ADO.NET-Entitätsdatenmodells habe ich Code First from Database (neue Funktion in EF 6.1) ausgewählt, um die Modelle zu generieren. Anmerkung: Modellklassen und DbContext-Klasse wurden erfolgreich generiert, aber NO .edmx- oder .tt-Datei wurde generiert.

  2. Als Nächstes habe ich ein neues Gerüstelement hinzugefügt: MVC 5-Controller mit Ansichten unter Verwendung von Entity Framework. Hinweis: Erfolg, Controller und Views generiert

Frage

Von nun an möchte ich Code First nicht mehr verwenden, um meine Datenbank zu aktualisieren. Stattdessen möchte ich, dass die Modelle basierend auf Datenbankänderungen aktualisiert werden. Was macht man als nächstes? Wenn ich keine edmx-Datei habe, kann ich meine Modellklassen dann nicht aus der Datenbank aktualisieren?

56
gkaio

Der Assistent für Entitätsdatenmodell-Code First aus Datenbank erstellt Ihre Entitätsklassen hervorragend, als ob sie im Code First-Stil erstellt worden wären. Sie fragen sich, ob es eine Möglichkeit gibt, diese Klassen auf dem neuesten Stand zu halten, wenn sich Ihre Datenbank ändert, ähnlich dem EDMX-Stil "Update Model From Database". Nach meinen Recherchen ist dies mit den eingebauten Werkzeugen nicht möglich . Hier ist jedoch eine Abhilfemaßnahme, die ich für nützlich befunden habe:

Angenommen, ich habe eine Datenbank mit einer Produkttabelle und einer Kundentabelle. Ursprünglich habe ich eine StoreDBContext-Klasse erstellt und ein Produkt als eines meiner Objekte ausgewählt. Jetzt möchte ich die Kundentabelle als neue Entität zum vorhandenen Kontext hinzufügen. So machen Sie das mit dem Code First Wizard:

  1. Erstellen Sie ein neues Entitätsdatenmodell, nennen Sie es StoreDBContextTemp oder was auch immer Add new item
  2. Wählen Sie zuerst den Code aus der Datenbank-Assistentenoption code first from database
  3. Wählen Sie den Kunden als ein Objekt zum Hinzufügen aus (nur den Kunden) und schließen Sie den Assistenten ab add table
  4. Öffnen Sie die neu erstellte Kontextdatei, StoreDBContextTemp.cs, und kopieren Sie die virtuellen Eigenschaften Ihrer neu hinzugefügten Entitäten:

public virtual DbSet<Customer> Customers {get; set;}

  1. Fügen Sie diese neuen Eigenschaften in Ihr Original ein StoreDBContext.cs dbcontext class.
  2. Löschen Sie StoreDBContextTemp.cs und entfernen Sie die Verbindungszeichenfolge für StoreDBContextTemp in app.config/web.confg usw.
  3. Sie können jetzt Customer für die StoreDBContext-Klasse verwenden

Wenn Sie Tabellen hinzufügen oder entfernen, müssen Sie Felder manuell anpassen, müssen jedoch nicht jedes Mal, wenn dem Modell eine neue Tabelle hinzugefügt wird, Dutzende von Eigenschaften manuell schreiben.

50

Eine weitere Option besteht darin, die automatisch generierten Klassen aus dem Projekt zu löschen und erneut zu generieren. Während wir diesem Ansatz folgen, müssen wir nur sicherstellen, dass wir für das Datenmodell den gleichen Namen (Klassenname, der von DbContext erbt) wie für das vorherige Modell angeben. Der Name des Datenmodells ist im folgenden Snap markiert

Data Model Name

8
Rajesh Pawde

Drei Dinge.

  1. Es gibt kein .edmx, wenn Sie Code First verwenden.

  2. Wenn Sie Code First Migrations verwenden, müssen Sie zuerst den Code schreiben und anschließend die Änderungen an der Datenbank migrieren. Dies hilft Ihnen, Ihren Code ohne generierten Code besser zu organisieren, was von Vorteil ist.

  3. In Visual Studio gibt es ein Plugin, um das Gegenteil zu tun. Mit Entity Framework PowerTools können Sie die Datenbank auswählen und Objekten zuordnen.

https://visualstudiogallery.msdn.Microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

Zur Antwort von Brian Vander Plaats ist noch etwas hinzuzufügen. In Schritt 4 möchten Sie auch alle Elemente kopieren, die sich in der neuen StoreDBContextTemp.cs/OnModelCreating-Methode befinden, und sie der vorhandenen StoreDBContext.cs/OnModelCreating-Methode hinzufügen. Andernfalls würden Sie diese Konfigurationszusätze verlieren, wenn Sie die neue Kontextklasse löschen.

3
Gary Burgess