Vergleichen von EF Core und EF 6

EF Core

Entity Framework Core (EF Core) ist ein moderner Objekt-Datenbank-Mapper für .NET. Er unterstützt LINQ-Abfragen, Änderungsnachverfolgung, Updates und Schemamigrationen.

EF Core funktioniert mit SQL Server/Azure SQL-Datenbank, SQLite, Azure Cosmos DB, MySQL, PostgreSQL und vielen weiteren Datenbanken über ein Datenbankanbieter-Plug-In-Modell.

EF6

Entity Framework 6 (EF6) ist ein objektrelationaler Mapper, der für .NET Framework konzipiert ist, jedoch mit Unterstützung für .NET Core. EF6 ist ein stabiles, unterstütztes Produkt, das jedoch nicht mehr weiterentwickelt wird.

Funktionsvergleiche

EF Core bietet neue Features, die in EF6 nicht implementiert werden. Allerdings sind derzeit nicht alle EF6-Features in EF Core implementiert.

In den folgenden Tabellen werden die in EF Core und EF6 verfügbaren Funktionen verglichen. Das ist ein allgemeiner Vergleich, in dem nicht alle Funktionen aufgelistet und nicht alle Unterschiede zwischen der gleichen Funktion in verschiedenen EF-Versionen erläutert sind.

Die Spalte „EF Core“ zeigt die Produktversion, in der die Funktion zum ersten Mal eingeführt wurde.

Erstellen eines Modells

Feature EF6.4 EF Core
Grundlegende Klassenzuordnung Ja 1.0
Konstruktoren mit Parametern 2.1
Konvertierungen von Eigenschaftswerten 2.1
Zugeordnete Typen ohne Schlüssel 2.1
Konventionen Ja 1.0
Benutzerdefinierte Konventionen Ja 7.0
Datenanmerkungen Ja 1.0
Fluent-API Ja 1.0
Vererbung: Tabelle pro Hierarchie (TPH) Ja 1.0
Vererbung: Tabelle pro Typ (TPT) Ja 5.0
Vererbung: Tabelle pro konkrete Klasse (TPC) Ja 7.0
Eigenschaften im Schattenzustand 1.0
Alternativschlüssel 1.0
M:n-Navigationen Ja 5.0
m:n ohne Joinentität Ja 5.0
Schlüsselgenerierung: Datenbank Ja 1.0
Schlüsselgenerierung: Client 1.0
Complex-/Owned-Typen Ja 2.0
Räumliche Daten Ja 2.2
Modellformat: Code Ja 1.0
Modell aus Datenbank erstellen: Befehlszeile Ja 1.0
Modell aus Datenbank aktualisieren Partial Im Rückstand (#831)
Globale Abfragefilter 2.0
Tabellenaufteilung Ja 2.0
Entitätsaufteilung Ja 7.0
Zuordnung von Skalarfunktionen für Datenbanken Schlecht 2.0
Zuordnung von Datenbanktabellenwertfunktionen Schlecht 5.0
Feldzuordnung 1.1
Nullwerte zulassende Verweistypen (C# 8.0) 3.0
Grafische Visualisierung eines Modells Ja Keine Unterstützung geplant (1)
Grafischer Modell-Editor Ja Keine Unterstützung geplant (1)
Modellformat: EDMX (XML) Ja Keine Unterstützung geplant (1)
Modell aus Datenbank erstellen: VS-Assistent Ja Keine Unterstützung geplant (1)

Abfragen von Daten

Feature EF6.4 EF Core
LINQ-Abfragen Ja 1.0
Lesbares generiertes SQL Schlecht 1.0
GroupBy-Übersetzung Ja 2.1
Laden zugehöriger Daten: Eager Ja 1.0
Laden von verknüpften Daten: Eager Loading für abgeleitete Typen 2.1
Laden zugehöriger Daten: Lazy Ja 2.1
Laden zugehöriger Daten: Explizit Ja 1.1
RAW-SQL-Abfragen: Entitätstypen Ja 1.0
Rohe SQL-Abfragen: Schlüssellose Entitätstypen Ja 2.1
Unformatierte SQL-Abfragen: Erstellung mit LINQ 1.0
Explizit kompilierte Abfragen Schlecht 2.0
await foreach (C# 8.0) 3.0
Textbasierte Abfragesprache (Entity SQL) Ja Keine Unterstützung geplant (1)

Speichern von Daten

Feature EF6.4 EF Core
Änderungsnachverfolgung: Momentaufnahme Ja 1.0
Änderungsnachverfolgung: Benachrichtigung Ja 1.0
Änderungsnachverfolgung: Proxys Ja 5.0
Zugriff auf den erfassten Zustand Ja 1.0
Optimistische Nebenläufigkeit Ja 1.0
Transaktionen Ja 1.0
Anweisungsbatches 1.0
Mapping der gespeicherten Prozedur Ja 7.0
Abgekoppelter Graph: Lowlevel-APIs Schlecht 1.0
Abgekoppelter Graph: End-to-End 1.0 (partiell; #5536)

Andere Funktionen

Feature EF6.4 EF Core
Migrationen Ja 1.0
APIs zum Erstellen/Löschen von Datenbanken Ja 1.0
Ausgangswerte Ja 2.1
Verbindungsstabilität Ja 1.1
Interceptors Ja 3.0
Ereignisse Ja 3.0 (partiell; #626)
Einfache Protokollierung („Database.Log“) Ja 5.0
DbContext-Pooling 2.0

Datenbankanbieter (2)

Feature EF6.4 EF Core
SQL Server Ja 1.0
MySQL Ja 1.0
PostgreSQL Ja 1.0
Oracle Ja 1.0
SQLite Ja 1.0
SQL Server Compact Ja 1.0 (3)
DB2 Ja 1.0
Firebird Ja 2.0
Jet (Microsoft Access) 2.0 (3)
Azure Cosmos DB 3.0
In-Memory (für Tests) 1.0

1 Einige EF6-Features werden in EF Core nicht implementiert. Diese Features hängen von dem EF6 zugrunde liegenden Entity Data Model (EDM) ab und/oder sind komplexe Features mit relativ geringer Rendite. Wir freuen uns immer über Feedback, aber obwohl EF Core viele Dinge ermöglicht, die in EF6 nicht möglich sind, kann EF Core umgekehrt nicht alle Features von EF6 unterstützen.

2 Von Drittanbietern implementierte EF Core-Datenbankanbieter führen die Aktualisierung auf neue Hauptversionen von EF Core vielleicht verzögert durch. Weitere Informationen finden Sie unter Datenbankanbieter.

3 Die SQL Server Compact- und Jet-Anbieter funktionieren nur für .NET Framework (nicht für .NET Core).

Unterstützte Plattformen

EF Core 3.1 wird unter .NET Core und .NET Framework durch die Verwendung von .NET Standard 2.0 ausgeführt. EF Core 5.0 kann jedoch nicht auf .NET Framework ausgeführt werden. Weitere Informationen finden Sie unter Plattformen.

EF6.4 wird unter .NET Core und .NET Framework durch die Festlegung von Zielversionen ausgeführt.

Leitfaden für neue Anwendungen

Verwenden Sie EF Core auf .NET Core für alle neuen Anwendungen, es sei denn, die App benötigt etwas, das nur auf .NET Framework unterstützt wird.

Leitfaden für vorhandene EF6-Anwendungen

EF Core ist kein direkter Ersatz für EF6. Für den Wechsel von EF6 zu EF Core sind wahrscheinlich Änderungen an Ihrer Anwendung erforderlich.

Beim Verschieben einer EF6-App zu .NET Core:

  • Verwenden Sie EF6 weiterhin, wenn der Datenzugriffscode stabil ist und wahrscheinlich nicht weiterentwickelt wird oder neue Funktionen benötigt.
  • Portieren Sie nach EF Core, wenn der Datenzugriffscode weiterentwickelt wird oder die neue App Funktionen benötigt, die nur in EF Core verfügbar sind.
  • Das Portieren auf EF Core wird häufig auch um der Leistung willen durchgeführt. Aber weil nicht alle Szenarien schneller sind, sollten Sie zunächst eine Profilerstellung durchführen.

Weitere Informationen finden Sie unter Portieren von EF6 auf EF Core.