Plan für Entity Framework Core 5.0
Wichtig
EF Core 5.0 wurde veröffentlicht. Auf dieser Seite finden Sie Informationen zum Verlauf der Planung.
Wie im Artikel zum Planungsprozess beschrieben, haben wir aus dem Feedback der Stakeholder diesen vorläufigen Plan für EF Core 5.0 erstellt.
Wichtig
Er befindet sich aktuell in der Entwicklung. Sein Inhalt ist nicht verbindlich. Er dient als Ausgangspunkt und wird durch neues Feedback weiterentwickelt. Es kann also sein, dass die Version 5.0 Funktionen enthalten wird, die bisher nicht geplant waren. Im Gegenzug kann es jedoch auch passieren, dass Funktionen gestrichen werden, die bisher für die Version 5.0 geplant waren.
Allgemeine Informationen
Versionsnummer und Veröffentlichungsdatum
EF Core 5.0 soll zusammen mit .NET 5.0 veröffentlicht werden. Deshalb wurde auch „5.0“ als Versionsnummer gewählt.
Unterstützte Plattformen
EF Core 5.0 soll auf jeder .NET Standard 2.1-Plattform einschließlich .NET 5.0 ausgeführt werden können. Dies ist Teil der allgemeineren .NET-übergreifenden Plattformzusammenführung zu .NET Core.
EF Core 5.0 kann nicht auf .NET Framework ausgeführt werden.
Aktuelle Änderungen
EF Core 5.0 wird einige Breaking Changes enthalten. Diese werden jedoch weniger gravierende Auswirkungen als bei EF Core 3.0 haben. Unser Ziel ist es, die Mehrzahl der Anwendungen zu aktualisieren, ohne dass Breaking Changes auftreten.
Dennoch gehen wir davon, dass Datenbankanbieter auf einige Breaking Changes stoßen werden, besonders im Bereich TPT-Unterstützung. Wir gehen jedoch davon aus, dass der Arbeitsaufwand für das Aktualisieren eines Providers auf 5.0 geringer ausfällt als bei 3.0.
Designs
Wir haben einige wichtige Bereiche/Themen bestimmt, die die Grundlage für die großen Änderungen in EF Core 5.0 bilden.
Vollständig transparente m:n-Zuordnung nach Konvention
Leitende Entwickler: @smitpatel, @AndriySvyryd und @lajones
Nachverfolgbar über Issue 10508
T-Shirt-Größe: L
Status: Erledigt
„m:n“ ist das am meisten geforderte Feature (ca. 506 Stimmen) im GitHub-Backlog.
Die Unterstützung für m:n-Beziehungen kann in drei Hauptbereiche aufgeteilt werden:
- Das Überspringen von Navigationseigenschaften wird im nächsten Artikel behandelt.
- Entitätstypen für Eigenschaftenbehälter. Dank dieser Entitätstypen kann für Entitätsinstanzen ein Standard-CLR-Typ wie
Dictionary
verwendet werden. So ist für einen Entitätstyp kein expliziter CLR-Typ mehr notwendig. Nachverfolgbar über Issue 9914 - Sugar für die einfache Konfiguration von m:n-Beziehungen.
Nicht nur das Überspringen von Navigationseigenschaften wird unterstützt, sondern auch folgende weitere Bereiche von m:n werden in EF Core 5.0 integriert, damit Sie diese Option vollständig nutzen können.
M:n-Navigationseigenschaften (auch bekannt als „Navigationseigenschaften überspringen“)
Leitende Entwickler: @smitpatel und @AndriySvyryd
Nachverfolgbar über #19003
T-Shirt-Größe: L
Status: Erledigt
Wie im ersten Artikel beschrieben wurde, hat die m:n-Unterstützung mehrere Aspekte. In diesem Artikel wird insbesondere die Verwendung des Features zum Überspringen von Navigationseigenschaften nachverfolgt. Unserer Meinung nach liegt der Wunsch nach m:n-Unterstützung hauptsächlich daran, dass bei Geschäftslogik wie Queries bisher keine Möglichkeit besteht, die „natürlichen“ Beziehungen zu verwenden, ohne auf die Jointabelle verweisen zu müssen. Der Entitätstyp „Jointabelle“ existiert zwar noch, sollte in Geschäftslogik aber nicht mehr verwendet werden.
Tabelle-pro-Typ-Vererbungszuordnung (TPT)
Leitende Entwickler: @AndriySvyryd und @smitpatel
Nachverfolgbar über #2266
T-Shirt-Größe: XL
Status: Erledigt
Wir arbeiten an der TPT-Unterstützung, weil dieses Feature sehr stark nachgefragt wurde (ca. 289 Stimmen, 3. Platz insgesamt) und dafür nur wenige spezifische Änderungen erforderlich sind, die den allgemeinen Grundlagen des .NET 5-Plans entsprechen. Datenbankanbieter werden deshalb höchstwahrscheinlich Breaking Changes bemerken. Diese erfordern jedoch viel weniger Arbeit als bei der Umstellung auf Version 3.0.
Gefilterte Include-Funktion
Leitender Entwickler: @maumar
Nachverfolgbar über #1833
T-Shirt-Größe: M
Status: Erledigt
Gefilterte Include-Abfragen wurden sehr oft gewünscht (ca. 376 Stimmen, 2. Platz insgesamt). Sie bedürfen nicht viel Arbeit und ermöglichen bzw. vereinfachen viele Szenarios, für die bisher Filter auf Modellebene oder komplexere Abfragen nötig sind.
Aufgeteilte Include-Abfragen
Leitender Entwickler: @smitpatel
Nachverfolgbar über Issue 20892
T-Shirt-Größe: L
Status: Erledigt
In EF Core 3.0 wurde das Standardverhalten für das Erstellen einer einzelnen SQL-Abfrage für eine bestimmte LINQ-Abfrage geändert. Dadurch kam es zu enormen Leistungsregressionen für Abfragen, die Include für mehrere Sammlungen verwenden.
In EF Core 5.0 wird das neue Standardverhalten beibehalten. EF Core 5.0 lässt jedoch jetzt die Generierung mehrerer Include-Abfragen für Sammlungen zu, bei denen eine einzelne Abfrage zu Leistungsproblemen führen würde.
Erforderliche Elemente mit 1:1-Abhängigkeit
Leitende Entwickler: @AndriySvyryd und @smitpatel
Nachverfolgbar über Issue 12100
T-Shirt-Größe: M
Status: Erledigt
In EF Core 3.0 sind alle abhängigen Elemente optional, einschließlich nicht eigenständiger Typen (Person.Address kann beispielsweise NULL sein). In EF Core 5.0 können abhängige Elemente als „erforderlich“ konfiguriert werden.
Rationalisieren von „ToTable“, „ToQuery“, „ToView“, „FromSQL“, usw.
Leitende Entwickler: @AndriySvyryd und @smitpatel
Nachverfolgbar über #17270
T-Shirt-Größe: L
Status: Erledigt
Bereits in früheren Versionen wurden Schritte zur Unterstützung von unformatierten SQL-Abfragen, schlüssellosen Typen sowie damit zusammenhängenden Dingen unternommen. Beim Zusammenspiel des Ganzen bestehen jedoch noch Inkonsistenzen und Verbesserungsbedarf. Ziel in Version 5.0 ist es, daran zu arbeiten und den Benutzern das Definieren, Migrieren und Verwenden verschiedener Entitätstypen sowie der dazugehörigen Abfragen und Datenbankartefakte zu erleichtern. Dafür sind ggf. auch Aktualisierungen der kompilierten Abfrage-API erforderlich.
Dadurch kann es jedoch zu Breaking Changes auf Anwendungsebene kommen, da manche der aktuell verfügbaren Funktionen den Benutzern zu viel ermöglichen und dadurch Fehler provoziert werden. Deshalb werden später wahrscheinliche einige dieser Funktionen blockiert sein. Sie erhalten dann stattdessen eine Anleitung mit einer alternativen Lösung.
Allgemeine Abfrageverbesserungen
Leitende Entwickler: @smitpatel und @maumar
Nachverfolgbar über Liste der Probleme im 5.0-Meilenstein mit der Bezeichnung area-query
T-Shirt-Größe: XL
Status: Erledigt
Für EF Core 3.0 wurde der Code für die Abfrageübersetzung umfassend umgeschrieben. Deshalb ist er allgemein viel robuster. Bei Version 5.0 sind neben den für die TPT-Unterstützung und das Überspringen von Navigationseigenschaften erforderlichen Änderungen keine großen Anpassungen an der Abfrageübersetzung vorgesehen. Es bestehen jedoch noch einige technische Altlasten aus dem Wechsel zu Version 3.0, für die noch viel Arbeit erforderlich ist. Zusätzlich werden viele Fehler behoben und kleine Verbesserungen eingeführt, wodurch die Benutzer Abfragen noch besser ausführen können.
Migration und Bereitstellung
Leitender Entwickler: @bricelam
Nachverfolgbar über #19587
T-Shirt-Größe: L
Status: Bereichsbezogen/Erledigt
Bereichsdefinition: Das Migrationsbundlefeature wurde bis auf einen Zeitpunkt nach dem EF Core 5.0-Release verschoben. Einige andere Verbesserungen für Migrationen sind jedoch im EF Core 5.0-Release enthalten.
Derzeit migrieren viele Entwickler ihre Datenbanken beim Start der Anwendung. Das ist einfach, empfiehlt sich jedoch aus folgenden Gründen nicht:
- Mehrere Threads/Prozesse/Server versuchen möglicherweise gleichzeitig, die Datenbank zu migrieren.
- Anwendungen versuchen möglicherweise, den Zustand „inkonsistent“ zu erreichen, während dies geschieht.
- Normalerweise sollte die Berechtigung, das Schema zu modifizieren, nicht bei Ausführung der Anwendung erteilt werden.
- Wenn etwas schiefgeht, ist es schwer, wieder einen fehlerfreien Zustand zu erreichen.
Wir möchten dafür sorgen, dass es einfach ist, die Datenbank zum Zeitpunkt der Bereitstellung zu migrieren. Dafür haben wir uns folgende Ziele gesetzt:
- Gemeinsame Lösung für Linux, macOS und Windows
- Unkompliziert über die Befehlszeile ausführbar
- Unterstützung von Szenarios mit Containern
- Kombinierbar mit häufig verwendeten Bereitstellungstools-/-flows
- Integration in Visual Studio (mindestens)
Daraus werden sich wahrscheinlich viele kleine Verbesserungen bei EF Core ergeben, z. B. bessere Migrationen bei SQLite. Kombiniert mit Leitfäden und einer langfristigen Zusammenarbeit mit anderen Teams entstehen ganzheitliche Verbesserungen, nicht nur bei EF.
EF Core-Plattformen
Leitende Entwickler: @roji und @bricelam
Nachverfolgbar über #19588
T-Shirt-Größe: L
Status: Bereich/Erledigt
Bereichsdefinition: Ein Plattformleitfaden und Beispiele werden für Blazor, Xamarin, WinForms und WPF veröffentlicht. Xamarin- sowie weitere AOT-/Linker-Verbesserungen sind für EF Core 6.0 geplant.
Wir haben gute Leitfäden für die Verwendung von EF Core in traditionellen, MVC ähnelnden Webanwendungen. Die Leitfäden für andere Plattformen und Anwendungsmodelle sind entweder veraltet oder fehlen ganz. Für EF Core 5.0 werden wir untersuchen, wie gut sich EF-Core mit den folgenden Dingen kombinieren lässt. Die Ergebnisse werden dokumentiert, und wir versuchen, weitere Verbesserungen zu erreichen.
- Blazor
- Xamarin, einschließlich der Verwendung von AOT/Linker-Story
- WinForms/WPF/WinUI und möglicherweise andere Benutzeroberflächen-Frameworks
Daraus werden sich wahrscheinlich viele kleine Verbesserungen bei EF Core ergeben. Kombiniert mit Leitfäden und einer langfristigen Zusammenarbeit mit anderen Teams entstehen ganzheitliche Verbesserungen, nicht nur bei EF.
Bestimmte Bereiche, die wir uns ansehen möchten, sind:
- Bereitstellung, einschließlich der Verwendung von EF-Tools, z. B. für Migrationen
- Anwendungsmodelle, einschließlich Xamarin, Blazer und gegebenenfalls weitere
- SQLite-Funktionen, einschließlich räumlicher Daten und Neuerstellung von Tabellen
- AOT und Verknüpfungen
- Integration von Diagnosefunktionen, einschließlich Leistungsindikatoren
Leistung
Leitender Entwickler: @roji
Nachverfolgbar über Liste der Probleme im 5.0-Meilenstein mit der Bezeichnung area-perf
T-Shirt-Größe: L
Status: Bereichsbezogen/Erledigt
Bereichsdefinition: Wichtige Leistungsverbesserungen beim Npgsql-Anbieter wurden abgeschlossen. Weitere Leistungsverbesserungen sind für EF Core 6.0 geplant.
In EF Core möchten wir die vorhandenen Leistungsbenchmarks verbessern und gezielt Leistungsverbesserungen an der Runtime vornehmen. Außerdem ist geplant, die Arbeit an der neuen ADO.NET-API für Batchverarbeitung abzuschließen, die während des Veröffentlichungszyklus der Version 3.0 als Prototyp vorgestellt worden war. Zusätzlich möchten wir auf der ADO.NET-Ebene zusätzliche Leistungsverbesserungen bei Npgsql vornehmen.
Des Weiteren möchten wir bei Bedarf ADO.NET/EF Core-Leistungsindikatoren und andere Diagnosefunktionen hinzufügen.
Dokumentation zu Architektur und Mitwirkenden
Für die Dokumentation verantwortliche Person: @ajcvickers
Nachverfolgbar über #1920
T-Shirt-Größe: L
Status: Cut
Ziel ist es, verständlicher zu machen, was in EF Core passiert. Dies kann für alle Personen nützlich sein, die EF Core verwenden. Das Hauptziel ist jedoch, externen Personen Folgendes zu erleichtern:
- Mitarbeit am EFF Core-Code
- Erstellen von Datenbankanbietern
- Erstellen anderer Erweiterungen
Update: Leider war dieser Plan zu ambitioniert. Wir halten das Feature weiterhin für wichtig, dennoch kann es nicht in EF Core 5.0 aufgenommen werden.
Dokumentation zu Microsoft.Data.Sqlite
Für die Dokumentation verantwortliche Person: @bricelam
Nachverfolgbar über #1675
T-Shirt-Größe: M
Status: Abgeschlossen. Die neue Dokumentation finden Sie auf Microsoft Learn.
Das EF-Team ist auch Eigentümer des Microsoft.Data.Sqlite ADO.NET-Anbieters. Wir planen, als Teil der Veröffentlichungen für EF Core 5.0, eine vollständige Dokumentation zu diesem Anbieter bereitzustellen.
Allgemeine Dokumentation
Für die Dokumentation verantwortliche Person: @ajcvickers
Nachverfolgbar über Probleme in Dokumentation-Repository im 5.0-Meilenstein
T-Shirt-Größe: L
Status: In Bearbeitung
Die Aktualisierung der bestehenden Dokumentation für die Releases 3.0 und 3.1 läuft bereits. Zusätzlich arbeiten wir an Folgendem:
- Überarbeitung der Einsteigerartikel, um sie ansprechender und leichter verständlich zu machen
- Neuanordnung von Artikeln, um sie leichter auffindbar zu machen und um Querverweise hinzufügen zu können
- Hinzufügen von ausführlicheren Details und Erläuterungen zu vorhandenen Artikeln
- Aktualisieren bestehender Beispiele und Hinzufügen zusätzlicher Beispiele
Beheben von Fehlern
Nachverfolgbar über Liste der Probleme im 5.0-Meilenstein mit der Bezeichnung type-bug
Entwickler: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd @ajcvickers
T-Shirt-Größe: L
Status: In Bearbeitung
Zum Zeitpunkt der Entstehung dieses Artikels haben wir 135 Fehler kategorisiert, die in Version 5.0 behoben werden sollen. Davon sind 62 bereits behoben. Hier besteht jedoch eine starke Überschneidung mit den weiter oben beschriebenen allgemeinen Abfrageverbesserungen.
Im Laufe des Releases 3.0 wurden pro Monat etwa 23 Probleme in Meilensteine aufgenommen. Davon müssen jedoch nicht alle in Version 5.0 behoben werden. Grob geschätzt sollen im Zeitraum von Version 5.0 zusätzlich 150 Probleme behoben werden.
Kleinere Verbesserungen
Nachverfolgbar über Liste der Probleme im 5.0-Meilenstein mit der Bezeichnung type-enhancement
Entwickler: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd @ajcvickers
T-Shirt-Größe: L
Status: Erledigt
Zusätzlich zu den oben beschriebenen größeren Funktionen sind in Version 5.0 auch viele kleinere Verbesserungen geplant, mit denen Probleme behoben werden, die als unkritisch gelten. Viele dieser Verbesserungen sind auch durch die oben beschriebenen, allgemeineren Themen abgedeckt.
Verschoben auf nächste Version
Nachverfolgbar über Liste der Probleme im 5.0-Meilenstein mit der Bezeichnung consider-for-next-release
Dabei handelt es sich um Fehlerbehebungen und Verbesserungen, die aktuell nicht für das Release 5.0 vorgesehen sind, aber je nach Fortschritt bei den oben beschriebenen Zielen zusätzlich angegangen werden.
Zusätzlich werden bei der Planung auch immer die Probleme mit den meisten Stimmen berücksichtigt. Bekannte Probleme erst in einem späteren Release zu beheben ist nicht schön, aber nötig, um die Auslastung der vorhandenen Ressourcen auf ein realistisches Maß zu beschränken.
Vorschläge
Ihr Feedback zur Planung ist wichtig. Sie können für ein Problem auf GitHub abstimmen (Daumen hoch) und so angeben, dass dieses Problem wichtig ist. Diese Daten werden dann in den Planungsprozess für das nächste Release aufgenommen.