Teilen über


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.

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt, und wählen Sie NuGet-Pakete verwalten... aus.
  2. 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.

  1. 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.

  2. 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.

  3. 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.