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.