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
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.
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
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?
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:
StoreDBContextTemp.cs
, und kopieren Sie die virtuellen Eigenschaften Ihrer neu hinzugefügten Entitäten:public virtual DbSet<Customer> Customers {get; set;}
StoreDBContext.cs
dbcontext class.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.
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
Drei Dinge.
Es gibt kein .edmx, wenn Sie Code First verwenden.
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.
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.