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
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].