Entity Framework Core 5.0

Eintrag zuletzt aktualisiert am: 06.11.2020

Entity Framework Core 5.0 ist der Nachfolger von Entity Framework Core 3.1, das im Dezember 2019 erschienen ist. Die Version 4.0 wurde ausgelassen in Angleichung an .NET 5.0, das zusammen mit Entity Framework Core 5.0 erscheint.

Erscheinungstermin: 10. Nov 2020

Platformen

Entity Framework Core 5.0 läuft nicht nur auf .NET 5.0, sondern auf allen Plattformen, die .NET Standard 2.1 anbieten (also z.B. .NET Core 3.1 und aktuelle Xamarin-Versionen).

Das klassisches .NET Framework ist damit aber ausgeschlossen, da es auch in der aktuellsten Version 4.8 nur .NET Standard 2.0 realisiert. Entity Framework Core 1.0, 1.1, 2.0, 2.1 und 2.2 liefen auf dem .NET Framework. Mit Entity Framework Core 3.0 hat Microsoft die klassischen .NET-Entwickler plötzlich ausgeschlossen, dann aber auf deren Drängen Entity Framework Core 3.1 wieder auf .NET Framework zum Laufen gebracht – dabei aber direkt auf GitHub klargestellt [https://github.com/aspnet/EntityFrameworkCore/issues/18141], dass dies eine letzte Ausnahme war.

Neuerungen

  • Abstraktion von N:M-Beziehungen (keine explizite .NET-Klasse für Zwischentabellen mehr notwendig)
  • Table-per-Type-Mapping (TPT) als Alternative zu Table-per-Hierarchy (TPH)
  • Mapping der .NET-Datentypen System.Net.IPAddress und System.Net.NetworkInformation.PhysicalAddress auf Zeichenkettenspalten
  • Erweiterung des Fluent-APIs, z.B. Genauigkeit für Dezimalzahlen mit HasPrecision() und Füllfaktor für SQL Server Indexe mit HasFillFactor(), persistente berechnete Spalten mit stored = true in HasComputedColumnSql() sowie UseCollation() als Einstellung für Sortierungen und Vergleiche. Neu ist auch, dass Tabellen mit ExcludeFromMigrations() aus den Schemamigrationen ausgeschlossen werden können.
  • Neue Annotation [Keyless], [Index] und [BackingField] als Alternative zum Fluent-API
  • Erweiterungen bei den Kommandozeilenbefehlen
  • Eager Loading mit Filter (Filtered Include)
  • Aufspalten der Abfragen beim Eager Loading mit .AsSplitQuery() und UseQuerySplittingBehavior()
  • Weitere skalare Datenbankfunktionen
  • Einfache Anzeige des zu einer LINQ-Abfrage gehörenden SQL-Befehls mit ToQueryString() und CreateDbCommand() sowie im Visual Studio Debugger per Debugger View
  • Vereinfachte Konfiguration der SQL-Protokollierung mit LogTo()
  • Detaillierte Fehlermeldungen mit EnableDetailedErrors()
  • Doppelte Objekte eliminieren bei No-Tracking-Queries mit PerformIdentityResolution() bzw. AsNoTrackingWithIdentityResolution()
  • Mit ChangeTracker.Clear() kann der Entwickler den Zustand eines Kontextes zurücksetzen.
  • Für die Beschaffung von Kontextinstanzen gibt es die neuen Methoden AddDbContextFactory() und AddPooledDbContextFactory().
  • Bei Transaktionen werden nun Savepoints und Transaction-Ids unterstützt.
  • Es ist erstmals möglich, dass der OR-Mapper bei einer einzigen Entitätsklasse für das Lesen der Daten eine Datenbanksicht (View), aber für das Schreiben eine Tabelle nutzt.
  • Table-Valued-Functions lassen sich jetzt nicht nur mit FromSql() aufrufen, der Entwickler kann auch auf einfache Weise Wrapper-Methoden in der Kontextklasse bereitstellen.
  • Microsoft hat Ereignisse ergänzt, die beim Speichern ausgelöst werden: SavingChanges(), SavedChanges() und SaveChangesFailed(). Einfluss auf den Speichervorgang kann der Entwickler in einem SaveChangesInterceptor nehmen.
  • Softwareentwickler können mit Indexer Properties auf Basis von C#-Indexern bestehende Entitätstypen um Spalten erweitern und auch zur Laufzeit ganz neue dynamische Entitätstypen mit Datenbankabbildung erschaffen.
  • Zur Diagnose kann der Betreiber einer Anwendung nun Event Counter des OR-Mappers mit dotnet counters monitor abrufen.