Entity Framework Core 9.0 (EF9)

Eintrag zuletzt aktualisiert am: 19.11.2024

Entity Framework Core 9.0 ist der Nachfolger von Entity Framework Core 8.0. Entity Framework Core 9.0 im Rahmen von .NET 9.0 am 12. November 2024 erschienen. Entity Framework Core 9.0 läuft nicht nur auf .NET 9.0, sondern auch auf .NET 8.0!

Hinweis: Microsoft kürzt Entity Framework Core 9.0 mit "EF9" ab, was zu Verwechselungen mit dem klassischen Entity Framework (EF) führen kann. Auch wenn es davon keine Version 9.0 gibt, wird es nun schwierig, wenn zwei Entwickler sich unterhalten. Die Aussage "Ich setze EF ein." ist dann nicht mehr eindeutig.

Support für Entity Framework Core 9.0

Entity Framework Core besitzt den gleichen Support-Zyklus wie .NET selbst, d.h.: Anders als der Vorgänger Entity Framework Core 8.0 besitzt die 9.0-Version nur einen "Standard-Term-Support" (18 Monate) statt "Long-Term-Support" für 36 Monate.

Breaking Changes in Entity Framework Core 9.0

Die Liste der Breaking Changes in Entity Framework Core 9.0 gegenüber der Vorgängerversion enthält nur vier Breaking Changes mit geringer Auswirkung.
https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-9.0/breaking-changes

Versionsgeschichte inkl. Vorabversionen

  • Preview 1 am 13.2.2024
  • Preview 2 am 12.3.2024
  • Preview 3 am 11.4.2024
  • Preview 4 am 21.5.2024
  • Preview 5 am 21.5.2024
  • Preview 6 am 09.07.2024
  • Preview 7 am 13.08.2024
  • Release Candidate 1 am 10.09.2024
  • Release Candidate 2 am 08.10.2024
  • Release to Manufacturing (RTM) am 12.11.2024

Überblick über die Neuerungen in Entity Framework Core 9.0

Verbesserungen bei der Modellerstellung
  • Automatisch kompilierte Modelle
  • Schreibgeschützte Objektmengen als Property-Typ
  • Cache-Einstellungen bei der Erstellung von Sequenzen
  • Weitere Verbesserungen bei der Modellerstellung
  • Die Entity Framework Core-Kommandozeilenwerkzeuge sollen nun weniger häufig eine Neukompilierung des Projekts erfordern.
  • Die Erstellung von Konventionen für die Modellerstellung hat Microsoft verschlankt

LINQ und Change-Tracking-API
  • Typsichere Erstellung von Hierarchie-IDs: HierarchyId.Parse(hierarchyId, int) neben HierarchyId.Parse(string)
  • Neue Materialisierungsmethode ToHashSetAsync()
  • Verkürzte Syntax für die Massenaktualisierung kompletter komplexer Typen bei ExecuteUpdate() und ExecuteUpdateAsync()

Übersetzung LINQ zu SQL
  • Einfluss auf die Parametrisierung
  • Gruppierungen über komplexe Typen
  • Math.Min() und Math.Max()
  • TimeOnly.FromDateTime() und TimeOnly.FromTimeSpan()
  • TrimStart() und TrimEnd()
  • PatIndex()
  • Weitere Verbesserungen bei der Übersetzung von LINQ in SQL

Verbesserungen für Azure Cosmos DB-Datenbanktreiber

Weitere Verbesserungen finden sich im Entity Framework Core-Datenbanktreiber für Azure Cosmos DB. Der Cosmos DB-Provider hat bereits seit Entity Framework Core 6.0 primitive Sammlungen in begrenzter Form unterstützt. In Version 9.0 wird diese Unterstützung verbessert, indem die Metadaten und API-Oberflächen für primitive Sammlungen in Dokumentdatenbanken, mit denen in relationalen Datenbanken konsolidiert werden. Dadurch können primitive Sammlungen explizit mit der Modellierungs-API abgebildet werden, das die Konfiguration von Facetten des Elementtyps ermöglicht. Zum Beispiel kann eine Liste von erforderlichen (nicht-null) Zeichenfolgen nun wie folgt abgebildet werden:
modelBuilder.Entity<Book>()
.PrimitiveCollection(e => e.Quotes)
.ElementType(b => b.IsRequired());

Zudem wirft der Entity Framework Core-Datenbanktreiber für Azure Cosmos DB ab Entity Framework Core 9.0 nun einen Laufzeitfehler aus, wenn Entwicklerinnen und Entwickler synchrone Zugriffe (z.B. mit ToList()) versuchen. Der Treiber unterstützt intern nämlich gar keine synchronen Zugriffe. Bisher waren synchrone Zugriffe dennoch möglich, wurden intern asynchron ausgeführt und dann wurden dann bis zum Ausführungsende blockiert. Das konnte zu Deadlocks führen. In Version 9.0 gibt es in diesem Falle nun im Standard einen Laufzeitfehler. Derzeit kann man das alte Verhalten noch wiederherstellen mit:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.ConfigureWarnings(b => b.Ignore(CosmosEventId.SyncNotSupported));

Microsoft hat in der Dokumentation https://learn.microsoft.com/en-us/ef/core/what-is-new/ef-core-9.0/whatsnew#azure-cosmos-db-for-nosql verkündet, dass man in zwei Jahren (in Version 11.0 von Entity Framework Core) synchrone Aufrufe im Treiber für Azure Cosmos DB komplett verbieten will. Spätestens dann müssen Entwicklerinnen und Entwickler alle synchronen Materialisierungsoperationen wie ToList() in die asynchronen Pendants ToListAsync() umgewandelt haben.
Außerdem unterstützt der Cosmos DB-Provider für Entity Framework Core ab Version 9.0 auch die rollenbasierte Zugriffskontrolle (RBAC) [https://learn.microsoft.com/en-us/azure/cosmos-db/role-based-access-control].