Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Entity Framework Core oder EF Core ist kurz gesagt eine vollständige Neuschreibung von Entity Framework für moderne Anwendungsarchitekturen. Aufgrund grundlegender Änderungen gibt es keinen direkten Upgradepfad. Zweck dieser Dokumentation ist es, einen End-to-End-Leitfaden für die Portierung Ihrer EF6-Anwendungen zu EF Core bereitzustellen.
Von Bedeutung
Bevor Sie den Portierungsprozess starten, ist es wichtig zu überprüfen, ob EF Core die Datenzugriffsanforderungen für Ihre Anwendung erfüllt. Alles, was Sie benötigen, finden Sie in der EF Core-Dokumentation.
Warnung
EF Core unterstützt nur moderne .NET und unterstützt .NET Framework nicht. Wenn Ihr Projekt weiterhin auf .NET Framework ausgerichtet ist, müssen Sie zu modernem .NET migrieren, bevor Sie die Migration von EF6 zu EF Core starten können. Beachten Sie, dass EF6 moderne .NET unterstützt, sodass Sie zuerst zu modernem .NET migrieren können, während EF6 beibehalten wird, und dann die Migration von EF6 zu EF Core angehen.
Gründe für das Upgrade
Alle neuen Entity Framework-Entwicklung geschieht in EF Core. Es gibt keine Pläne, neue Features nach EF6 zu portieren. EF Core wird auf den neuesten .NET-Runtimes ausgeführt und nutzt die Laufzeit voll aus, sowie plattform- und sprachspezifische Features (wie ASP.NET Core oder WPF). Hier sind einige der Vorteile, die Sie beim Upgraden erzielen:
- Nutzen Sie die laufenden Leistungsverbesserungen in EF Core. Beispielsweise sah ein Kunde, der von EF6 zu EF Core 6 migriert hat, aufgrund der Abfrageaufteilungsfunktion eine 40x-Reduzierung der Verwendung einer schweren Abfrage. Viele Kunden berichten von enormen Leistungsgewinnen, indem sie einfach auf den neuesten EF Core umsteigen.
- Verwenden Sie neue Features in EF Core. Es werden keine neuen Features zu EF6 hinzugefügt. Alle neuen Funktionalitäten, z. B. der Azure Cosmos DB-Anbieter und
DbContextFactory, werden nur EF Core hinzugefügt. Einen vollständigen Vergleich von EF6 mit EF Core, einschließlich mehrerer features exklusiv für EF Core, finden Sie unter: Compare EF Core & EF6. - Modernisieren Sie Ihren Anwendungsstapel mithilfe der Abhängigkeitseinfügung und integrieren Sie Ihren Datenzugriff nahtlos in Technologien wie gRPC und GraphQL.
Eine Notiz zu Migrationen
In dieser Dokumentation werden die Begriffe Portieren und Upgrade verwendet, um Verwechslungen mit dem Begriff Migrationen zu vermeiden, einem Feature von EF Core. Migrationen in EF Core sind aufgrund erheblicher Verbesserungen der Behandlung von Migrationen mit EF6 Code First nicht kompatibel. Es gibt keinen empfohlenen Ansatz zum Portieren Ihres Migrationsverlaufs. Planen Sie daher, "neu" in EF Core zu starten. Sie können die Code-Basis und die Daten aus Ihren EF6-Migrationen verwalten. Wenden Sie Ihre endgültige Migration in EF6 an, und erstellen Sie dann eine erste Migration in EF Core. Sie können den Verlauf in EF Core in Zukunft nachverfolgen.
Schritte zum Upgrade
Der Upgradepfad wurde in mehrere Dokumente aufgeteilt, die nach der Phase des Upgrades und dem Anwendungstyp organisiert sind.
Bestimmen des EF Core-Flavors
Es gibt mehrere Ansätze für die Funktionsweise von EF Core mit Ihrem Domänenmodell und der Datenbankimplementierung. Im Allgemeinen folgen die meisten Apps einem dieser Muster und wie Sie Ihren Port angehen, hängt von der Variante der Anwendung ab.
Code als Wahrheitsquelle ist ein Ansatz, bei dem alles über Code und Klassen modelliert wird, ob durch Datenattribute, fluent-Konfiguration oder eine Kombination aus beiden. Die Datenbank wird zunächst basierend auf dem in EF Core definierten Modell generiert, und weitere Updates werden in der Regel über Migrationen verarbeitet. Dies wird häufig als "Code zuerst" bezeichnet, aber der Name ist nicht ganz zutreffend, da ein Ansatz darin besteht, mit einer vorhandenen Datenbank zu beginnen, die Entitäten zu erstellen und dann anschließend mit Code weiterzuarbeiten.
Die Datenbank als Quelle der Wahrheit-Ansatz umfasst Reverse Engineering oder Erstellung von Gerüststrukturen für Ihren Code aus der Datenbank. Wenn Schemaänderungen vorgenommen werden, wird der Code entweder neu generiert oder aktualisiert, um die Änderungen widerzuspiegeln. Dies wird häufig als "Datenbank zuerst" bezeichnet.
Schließlich folgt ein komplexerer Hybridzuordnungsansatz der Philosophie, dass der Code und die Datenbank separat verwaltet werden, und EF Core wird verwendet, um zwischen den beiden zuzuordnen. Bei diesem Ansatz werden Migrationen in der Regel vermieden.
In der folgenden Tabelle sind einige allgemeine Unterschiede zusammengefasst:
| Ansatz | Entwicklerrolle | DBA-Rolle | Migrationen | Gerüst | Repo- |
|---|---|---|---|---|---|
| Zuerst den Code | Entwerfen von Entitäten und Überprüfen/Anpassen generierter Migrationen | Überprüfen von Schemadefinitionen und Änderungen | Per Commit | Nicht verfügbar | Nachverfolgen von Entitäten, DbContext und Migrationen |
| Datenbank zuerst | Reverse Engineering nach Änderungen und Überprüfen generierter Entitäten | Informieren Sie Entwickler, wenn die Datenbank geändert wird, um das Gerüst neu zu erstellen | Nicht verfügbar | Per Schemaänderung | Nachverfolgen von Erweiterungen/Partiellen Klassen, die die generierten Entitäten erweitern |
| Hybrid | Fluent-Konfiguration aktualisieren, wenn Entitäten oder Datenbanken geändert wurden | Informieren Sie Entwickler, wenn sich die Datenbank geändert hat, damit sie Entitäten und Modellkonfigurationen aktualisieren können. | Nicht verfügbar | Nicht verfügbar | Entitäten und DbContext nachverfolgen |
Der Hybridansatz ist ein komplexerer Ansatz mit zusätzlichem Aufwand im Vergleich zu herkömmlichen Code- und Datenbankansätzen.
Die Auswirkungen des Verlassens von EDMX verstehen
EF6 unterstützte ein spezielles Modelldefinitionsformat namens Entity Data Model XML (EDMX). EDMX-Dateien enthalten mehrere Definitionen, einschließlich konzeptioneller Schemadefinitionen (CSDL), Zuordnungsspezifikationen (MSL) und Speichern von Schemadefinitionen (SSDL). EF Core verfolgt die Domänen-, Zuordnungs- und Datenbankschemas über interne Modelldiagramme und unterstützt das EDMX-Format nicht. Viele Blogbeiträge und Artikel geben versehentlich an, dass EF Core nur "Code zuerst" unterstützt. EF Core unterstützt alle drei im vorherigen Abschnitt beschriebenen Anwendungsmodelle. Sie können das Modell in EF Core neu erstellen, indem Sie die Datenbank umkehren. Wenn Sie EDMX für eine visuelle Darstellung Ihres Entitätsmodells verwenden, sollten Sie die Open Source EF Core Power Tools verwenden, die ähnliche Funktionen für EF Core bereitstellen.
Weitere Informationen zu den Auswirkungen des Mangels an Unterstützung für EDMX-Dateien finden Sie im Handbuch zum Portieren von EDMX .
Ausführen der Upgradeschritte
Es ist keine Anforderung, die gesamte Anwendung zu portieren. EF6 und EF Core können in derselben Anwendung ausgeführt werden (siehe: Verwenden von EF Core und EF6 in derselben Anwendung). Um das Risiko zu minimieren, können Sie Folgendes in Betracht ziehen:
- Wechseln Sie zu EF6 unter .NET Core, falls noch nicht geschehen.
- Migrieren Sie einen kleinen Teil Ihrer App zu EF Core, und führen Sie sie parallel zu EF6 aus.
- Bringen Sie schließlich den Rest der Codebasis in EF Core, und setzen Sie den EF6-Code zurück.
Für den Port sind die folgenden allgemeinen Schritte erforderlich:
- Überprüfen Sie Verhaltensänderungen zwischen EF6 und EF Core.
- Führen Sie ggf. ihre letzten Migrationen in EF6 aus.
- Erstellen Sie Ihr EF Core-Projekt.
- Kopieren Sie entweder Code in das neue Projekt, führen Sie Reverse Engineering oder eine Kombination aus beiden aus.
- Umbenenne Verweise und Entitäten und aktualisiere Verhaltensweisen.
-
System.Data.EntitybisMicrosoft.EntityFrameworkCore - Ändern Sie den Konstruktor
DbContextso, dass Optionen genutzt werden undOnConfiguringaußer Kraft gesetzt wird. -
DbModelBuilderbisModelBuilder - Umbenennen von
DbEntityEntry<T>inEntityEntry<T> - Wechseln von
Database.LogzuMicrosoft.Extensions.Logging(erweiterten) oderDbContextOptionsBuilder.LogTo(einfachen) APIs - Änderungen anwenden für
WithRequiredundWithOptional(siehe hier) - Aktualisieren sie den Überprüfungscode. Es ist keine Datenüberprüfung in EF Core integriert, aber Sie können sie selbst erledigen.
- Führen Sie alle erforderlichen Schritte zum Portieren von EDMX aus.
-
- Führen Sie bestimmte Schritte basierend auf Ihrem EF Core-Ansatz aus:
Es gibt viele Überlegungen, die sich auf alle Ansätze beziehen, daher sollten Sie auch Möglichkeiten überprüfen, um die detaillierten Unterschiede zwischen EF6 und EF Core zu beheben und zu umgehen.