Upgrade auf Entity Framework 6
In früheren Versionen von EF wurde der Code aufgeteilt zwischen Kernbibliotheken (in erster Linie System.Data.Entity.dll), die als Teil des .NET Framework ausgeliefert wurden, und Out-of-Band (OOB)-Bibliotheken (in erster Linie EntityFramework.dll), die in einem NuGet-Paket ausgeliefert wurden. EF6 übernimmt den Code aus den Kernbibliotheken und integriert ihn in die OOB-Bibliotheken. Dies war erforderlich, damit EF als Open Source bereitgestellt werden kann und sich in einem anderen Tempo als .NET Framework weiterentwickeln kann. Dies hat zur Folge, dass Anwendungen für die verschobenen Typen neu erstellt werden müssen.
Dies sollte für Anwendungen einfach sein, die DbContext wie in EF 4.1 und höher ausgeliefert nutzen. Ein wenig mehr Arbeit ist für Anwendungen erforderlich, die ObjectContext verwenden, aber es ist immer noch nicht schwer, dies zu tun.
Hier ist eine Checkliste der Dinge, die Sie tun müssen, um ein Upgrade für eine vorhandene Anwendung auf EF6 durchzuführen.
1. Installieren Sie das EF6-NuGet-Paket
Sie müssen ein Upgrade auf die neue Entity Framework 6-Runtime durchführen.
- Klicken Sie mit der rechten Maustaste auf Ihr Projekt, und wählen Sie NuGet-Pakete verwalten... aus.
- Wählen Sie auf der Registerkarte Online die Option EntityFramework aus, und klicken Sie auf Installieren
Hinweis
Wenn eine frühere Version des EntityFramework-NuGet-Pakets installiert wurde, wird für das Paket ein Upgrade auf EF6 durchgeführt.
Alternativ können Sie den folgenden Befehl über die Paket-Manager-Konsole ausführen:
Install-Package EntityFramework
2. Stellen Sie sicher, dass Assemblyverweise auf System.Data.Entity.dll entfernt werden
Durch die Installation des EF6-NuGet-Pakets sollten automatisch alle Verweise auf System.Data.Entity aus Ihrem Projekt entfernt werden.
3. Tauschen Sie EF Designer (EDMX)-Modelle aus, um die EF 6.x-Codegenerierung zu verwenden
Wenn Sie Modelle haben, die mit dem EF Designer erstellt wurden, müssen Sie die Codegenerierungsvorlagen aktualisieren, um EF6-kompatiblen Code zu generieren.
Hinweis
Derzeit sind nur EF 6.x DbContext-Generatorvorlagen für Visual Studio 2012 und 2013 verfügbar.
Löschen sie vorhandene Codegenerierungsvorlagen. Diese Dateien werden in der Regel <edmx_file_name>.tt und <edmx_file_name>.Context.tt benannt und unter der EDMX-Datei im Projektmappen-Explorer geschachtelt. Sie können die Vorlagen im Projektmappen-Explorer auswählen und die ENTF-Taste drücken, um sie zu löschen.
Hinweis
In Websiteprojekten werden die Vorlagen nicht unter Ihrer EDMX-Datei geschachtelt, sondern neben ihr im Projektmappen-Explorer aufgeführt.
Hinweis
In VB.NET Projekten werden Sie „Alle Dateien anzeigen“ aktivieren müssen, um die geschachtelten Vorlagendateien zu sehen.
Fügen Sie die entsprechende EF 6.x-Codegenerierungsvorlage hinzu. Öffnen Sie Ihr Modell im EF Designer, klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Codegenerierungselement hinzufügen... aus.
Wenn Sie die DbContext-API (empfohlen) verwenden, dann wird der EF 6.x DbContext-Generator auf der Registerkarte Daten zur Verfügung stehen.
Hinweis
Wenn Sie Visual Studio 2012 verwenden, müssen Sie die EF 6-Tools installieren, um über diese Vorlage zu verfügen. Details finden Sie unter Entity Framework abrufen.
Wenn Sie die ObjectContext-API verwenden, müssen Sie die Registerkarte Online auswählen und nach EF 6.x EntityObject-Generator suchen.
Wenn Sie Anpassungen auf die Codegenerierungsvorlagen angewendet haben, müssen Sie diese erneut auf die aktualisierten Vorlagen anwenden.
4. Aktualisieren Sie Namespaces für alle verwendeten Kern-EF-Typen
Die Namespaces für DbContext- und Code First-Typen wurden nicht geändert. Das bedeutet für viele Anwendungen, die EF 4.1 oder höher verwenden, dass Sie nichts ändern müssen.
Typen wie ObjectContext, die sich zuvor in System.Data.Entity.dll befanden, wurden in neue Namespaces verschoben. Dies bedeutet, dass Sie möglicherweise Ihre using- oder Import-Anweisungen aktualisieren müssen, um mit EF6 zu erstellen.
Die allgemeine Regel für Namespaceänderungen lautet, dass jeder Typ in System.Data.* nach System.Data.Entity.Core.* verschoben wird. Mit anderen Worten: Fügen Sie einfach Entity.Core. nach System.Data ein. Beispiel:
- System.Data.EntityException => System.Data.Entity.Core.EntityException
- System.Data.Objects.ObjectContext => System.Data.Entity.Core.Objects.ObjectContext
- System.Data.Objects.DataClasses.RelationshipManager => System.Data.Entity.Core.Objects.DataClasses.RelationshipManager
Diese Typen befinden sich in den Core-Namespaces, da sie für die meisten DbContext-basierten Anwendungen nicht direkt verwendet werden. Einige Typen, die Teil von System.Data.Entity.dll waren, werden weiterhin häufig und direkt für DbContext-basierte Anwendungen verwendet und wurden daher nicht in die Core-Namespaces verschoben. Diese lauten wie folgt:
- System.Data.EntityState => System.Data.Entity.EntityState
- System.Data.Objects.DataClasses.EdmFunctionAttribute => System.Data.Entity.DbFunctionAttribute
Hinweis
Diese Klasse wurde umbenannt. Eine Klasse mit dem alten Namen ist immer noch vorhanden und funktioniert, aber sie ist jetzt als veraltet gekennzeichnet.
- System.Data.Objects.EntityFunctions => System.Data.Entity.DbFunctions
Hinweis
Diese Klasse wurde umbenannt. eine Klasse mit dem alten Namen ist immer noch vorhanden und funktioniert, aber sie ist jetzt als veraltet gekennzeichnet.)
- Räumliche Klassen (z. B. DbGeography, DbGeometry) wurden aus System.Data.Spatial => System.Data.Entity.Spatial verschoben
Hinweis
Einige Typen im System.Data-Namespace befinden sich in System.Data.dll, was keine EF-Assembly ist. Diese Typen wurden nicht verschoben, sodass ihre Namespaces unverändert bleiben.