Änderungen mit Auswirkungen auf den Anbieter

Diese Seite enthält Links zu Pull Requests, die am EF Core-Repository vorgenommen wurden und möglicherweise eine Reaktion von Autoren anderer Datenbankanbieter erfordern. Die Absicht besteht darin, Autoren vorhandener Datenbank von Drittanbietern beim Aktualisieren ihres Anbieters auf eine neue Version einen Ausgangspunkt zu liefern.

Wir beginnen dieses Protokoll mit den Änderungen von Version 2.1 auf Version 2.2. Vor Version 2.1 haben wir die Bezeichnungen providers-beware und providers-fyi für unsere Probleme und Pull Requests verwendet.

2.2 ---> 3.x

Beachten Sie, dass sich viele der Breaking Changes auf Anwendungsebene auch auf Anbieter auswirken.

  • https://github.com/dotnet/efcore/pull/14022
    • Veraltete APIs wurden entfernt und das Übermaß an optionalen Parametern reduziert
    • DatabaseColumn.GetUnderlyingStoreType() wurde entfernt
  • https://github.com/dotnet/efcore/pull/14589
    • Veraltete APIs wurden entfernt
  • https://github.com/dotnet/efcore/pull/15044
    • Unterklassen von CharTypeMapping wurden möglicherweise aufgrund von Behavior Changes beschädigt. Dies machte das Beheben einiger Fehler in der Basisimplementierung erforderlich.
  • https://github.com/dotnet/efcore/pull/15090
    • Es wurde eine Basisklasse für IDatabaseModelFactory hinzugefügt und aktualisiert, um ein Paramaterobjekt zu verwenden, um zukünftige Unterbrechungen zu vermeiden.
  • https://github.com/dotnet/efcore/pull/15123
    • Es wurden Parameterobjekte in MigrationsSqlGenerator verwendet, um zukünftige Unterbrechungen zu vermeiden.
  • https://github.com/dotnet/efcore/pull/14972
    • Die explizite Konfiguration von Protokollebenen erforderte einige Änderungen an APIs, die Anbieter möglicherweise verwenden. Insbesondere wenn Anbieter die Protokollierungsinfrastruktur direkt verwenden, kann diese Änderung die Verwendung möglicherweise unterbrechen. Darüber hinaus müssen Anbieter, die die Infrastruktur (die öffentlich sein wird) in Zukunft verwenden wollen, diese von LoggingDefinitions oder RelationalLoggingDefinitions ableiten. Beispiele finden Sie bei den SQL Server- und Speicheranbietern.
  • https://github.com/dotnet/efcore/pull/15091
    • Kern-, relationale und Abstraktionsressourcenzeichenfolgen sind jetzt öffentlich.
    • Die Erweiterungen CoreLoggerExtensions und RelationalLoggerExtensions sind jetzt öffentlich. Anbieter sollten diese APIs verwenden, wenn Ereignisse protokolliert werden, die auf der Kern- oder relationalen Ebene definiert sind. Greifen Sie nicht direkt auf Protokollierungsressourcen zu; da sie noch immer intern sind.
    • IRawSqlCommandBuilder wurde von einem Singleton- in einen bereichsbezogenen Dienst geändert.
    • IMigrationsSqlGenerator wurde von einem Singleton- in einen bereichsbezogenen Dienst geändert.
  • https://github.com/dotnet/efcore/pull/14706
    • Die Infrastruktur für das Erstellen relationaler Befehle wurde öffentlich gemacht, damit sie von Anbietern sicher verwendet und geringfügig umgestaltet werden kann.
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader wurde von einem bereichsbezogenen in einen vorübergehenden Dienst geändert.
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator wurde von einem bereichsbezogenen in einen Singleton-Dienst geändert.
    • Außerdem wurde ISingletonUpdateSqlGenerator entfernt.
  • https://github.com/dotnet/efcore/pull/15067
    • Eine große Menge interner Code, der von Anbietern verwendet wurde, wurden jetzt öffentlich gemacht.
    • Es sollte nicht mehr notwendig sein, auf die Klasse IndentedStringBuilder zu verweisen, da sie aus den Stellen ausgeklammert wurde, die sie verfügbar gemacht hatten.
    • Die Verwendung von NonCapturingLazyInitializer sollte durch LazyInitializer aus der BCL ersetzt werden.
  • https://github.com/dotnet/efcore/pull/14608
    • Diese Änderung wird im Dokument „Breaking Changes für Anwendungen“ umfassend behandelt. Für Anbieter kann dies stärkere Auswirkungen haben, da das Testen von EF Core häufig zum Auftreten dieses Problems führen kann. Daher wurde die Testinfrastruktur geändert, um das Auftreten des Problems weniger wahrscheinlich zu machen.
  • https://github.com/dotnet/efcore/issues/13961
    • EntityMaterializerSource wurde vereinfacht.
  • https://github.com/dotnet/efcore/pull/14895
    • Die StartsWith-Translation hat sich auf eine Weise geändert, auf die Anbieter möglicherweise reagieren möchten/müssen.
  • https://github.com/dotnet/efcore/pull/15168
    • Konventionssatzdienste wurden geändert. Anbieter sollten jetzt entweder von „ProviderConventionSet“ oder „RelationalConventionSet“ erben.
    • Anpassungen können mithilfe von IConventionSetCustomizer-Diensten hinzugefügt werden. Dieser Dienst sollte jedoch von anderen Erweiterungen und nicht von Anbietern verwendet werden.
    • Konventionen, die zur Laufzeit verwendet werden, sollten von IConventionSetBuilder aus aufgelöst werden.
  • https://github.com/dotnet/efcore/pull/15288
    • Das Datenseeding wurde in eine öffentliche API umgestaltet, um zu vermeiden, dass interne Typen verwendet werden müssen. Dies sollte sich nur auf nicht relationale Anbieter auswirken, da Seeding für alle relationalen Anbieter von der basisrelationalen Klasse behandelt wird.

2.1 ---> 2.2

Änderungen, die nur Tests betreffen

  • https://github.com/dotnet/efcore/pull/12057 – Zulassen anpassbarer SQL-Delimeter in Tests
    • Testen von Änderungen, die nicht strenge Gleitkommavergleiche in der BuiltInDataTypesTestBase zulassen
    • Testen von Änderungen, mit denen Abfragetests mit unterschiedlichen SQL-Delimetern wiederverwendet werden können
  • https://github.com/dotnet/efcore/pull/12072 – Hinzufügen von DbFunction-Tests zu den relationalen Spezifikationstests
    • So können diese Tests für alle Datenbankanbieter ausgeführt werden.
  • https://github.com/dotnet/efcore/pull/12362 – Asynchrone Testbereinigung
    • Wait- und nicht benötigter asynchrone Aufrufe wurden entfernt, und einige Testmethoden wurden umbenannt.
  • https://github.com/dotnet/efcore/pull/12666 – Vereinheitlichen der Protokollierungstestinfrastruktur
    • CreateListLoggerFactory wurde hinzugefügt, und Teile der älteren Protokollierungsinfrastruktur wurden entfernt. Dies erfordert, dass Anbieter mit diesen Tests reagieren.
  • https://github.com/dotnet/efcore/pull/12500 – Ausführen weiterer (synchroner und asynchroner) Abfragetests
    • Testnamen und Faktorierung haben sich geändert. Dies erfordert, dass Anbieter mit diesen Tests reagieren.
  • https://github.com/dotnet/efcore/pull/12766 – Umbenennen von Navigationen im ComplexNavigations-Modell
    • Anbieter, die diese Tests verwenden, müssen möglicherweise reagieren
  • https://github.com/dotnet/efcore/pull/12141 – Zurückgeben des Kontexts an den Pool anstelle des Löschens in Funktionstests
    • Diese Änderung umfasst die Umgestaltung einiger Tests, was möglicherweise eine Reaktion der Anbieter erfordert.

Änderungen an Tests und Produktcode

  • https://github.com/dotnet/efcore/pull/12109 – Konsolidieren der RelationalTypeMapping.Clone-Methoden
    • Änderungen in Version 2.1 an RelationalTypeMapping erlaubten eine Vereinfachung in abgeleiteten Klassen. Wir glauben nicht, dass dies für Anbieter zu Problemen führt, sondern dass sie vielmehr von diesr Änderung in ihren abgeleiteten Typzuordnungsklassen profitieren können.
  • https://github.com/dotnet/efcore/pull/12069 – Markierte oder benannte Abfragen
    • Fügt Infrastruktur zum Taggen von LINQ-Abfragen hinzu. Diese Tags werden in SQL als Kommentare angezeigt. Dies erfordert möglicherweise, dass Anbieter bei der SQL-Generierung reagieren.
  • https://github.com/dotnet/efcore/pull/13115 – Unterstützung von räumlichen Daten über NTS
    • Ermöglicht die Registrierung von Typzuordnungen und Member-Translatorn außerhalb des Anbieters.
      • Anbieter müssen base.FindMapping() in ihrer ITypeMappingSource-Implementierung aufrufen, damit die Registrierung funktioniert
    • Befolgen Sie dieses Muster, um Ihrem Anbieter eine Unterstützung für räumliche Daten hinzuzufügen, die anbieterübergreifend konsistent ist.
  • https://github.com/dotnet/efcore/pull/13199 – Hinzufügen eines erweiterten Debuggings für die Erstellung von Dienstanbietern
    • Ermöglicht DbContextOptionsExtensions die Implementierung einer neuen Schnittstelle, die den Benutzern helfen kann zu verstehen, warum der interne Dienstanbieter neu erstellt wird.
  • https://github.com/dotnet/efcore/pull/13289 – Hinzufügen der CanConnect-API zur Verwendung durch Integritätsprüfungen
    • Diese PR fügt das CanConnect-Konzept hinzu, das von ASP.NET Core-Integritätsprüfungen verwendet wird, um festzustellen, ob die Datenbank verfügbar ist. Standardmäßig ruft die relationale Implementierung nur Exist auf. Anbieter können jedoch bei Bedarf etwas anderes implementieren. Nicht relationale Anbieter müssen die neue API implementieren, damit die Integritätsprüfung verwendet werden kann.
  • https://github.com/dotnet/efcore/pull/13306 – Aktualisieren von base.RelationalTypeMapping, um DbParameter.Size nicht festzulegen
    • Unterlassen Sie das Festlegen von Size in Zukunft grundsätzlich, da dies zum Abschneiden von Daten führen kann. Anbieter müssen ihre eigene Logik möglicherweise anpassen, wenn Size festgelegt werden muss.
  • https://github.com/dotnet/efcore/pull/13372 – RevEng: Grundsätzliches Angeben des Spaltentyps für Dezimalspalten
    • Konfigurieren Sie grundsätzlich den Spaltentyp für Dezimalspalten im Gerüstcode, anstatt mithilfe von Konventionen zu konfigurieren.
    • Für Anbieter sollten keine Änderungen erforderlich sein.
  • https://github.com/dotnet/efcore/pull/13469 – Hinzufügen von CaseExpression zum Generieren von SQL CASE-Ausdrücken
  • https://github.com/dotnet/efcore/pull/13648 – Fügt die Möglichkeit hinzu, Typzuordnungen für SqlFunctionExpression anzugeben, um das Rückschließen von Argumenten und Ergebnissen auf den Speichertyp zu verbessern.