Zmiany wpływające na dostawcę

Ta strona zawiera linki do żądań ściągnięcia wysyłanych w repozytorium EF Core, które mogą wymagać od autorów innych dostawców baz danych reagowania. Celem jest zapewnienie punktu wyjścia dla autorów istniejących dostawców baz danych innych firm podczas aktualizowania dostawcy do nowej wersji.

Rozpoczynamy ten dziennik ze zmianami z wersji 2.1 do 2.2. Przed wersją 2.1 użyliśmy providers-beware etykiet i providers-fyi dotyczących naszych problemów i żądań ściągnięcia.

2.2 ---> 3.x

Należy pamiętać, że wiele zmian powodujących niezgodność na poziomie aplikacji będzie również miało wpływ na dostawców.

  • https://github.com/dotnet/efcore/pull/14022
    • Usunięto przestarzałe interfejsy API i zwinięte opcjonalne przeciążenia parametrów
    • Usunięto element DatabaseColumn.GetUnderlyingStoreType()
  • https://github.com/dotnet/efcore/pull/14589
    • Usunięto przestarzałe interfejsy API
  • https://github.com/dotnet/efcore/pull/15044
    • Podklasy elementu CharTypeMapping mogły zostać przerwane z powodu zmian zachowania wymaganych do naprawienia kilku usterek w implementacji podstawowej.
  • https://github.com/dotnet/efcore/pull/15090
    • Dodano klasę bazową dla klasy IDatabaseModelFactory i zaktualizowano ją tak, aby korzystała z obiektu paramatera w celu ograniczenia przyszłych przerw.
  • https://github.com/dotnet/efcore/pull/15123
    • Użyto obiektów parametrów w narzędziu MigrationsSqlGenerator, aby wyeliminować przyszłe przerwy.
  • https://github.com/dotnet/efcore/pull/14972
    • Jawna konfiguracja poziomów dzienników wymagała pewnych zmian w interfejsach API, których mogą używać dostawcy. W szczególności jeśli dostawcy korzystają bezpośrednio z infrastruktury rejestrowania, ta zmiana może spowodować przerwanie tego użycia. Ponadto dostawcy korzystający z infrastruktury (która będzie publiczna) będą musieli pochodzić z programu LoggingDefinitions lub RelationalLoggingDefinitions. Przykłady można znaleźć w temacie SQL Server i dostawcy w pamięci.
  • https://github.com/dotnet/efcore/pull/15091
    • Podstawowe, relacyjne i abstrakcyjne ciągi zasobów są teraz publiczne.
    • CoreLoggerExtensions i RelationalLoggerExtensions są teraz publiczne. Dostawcy powinni używać tych interfejsów API podczas rejestrowania zdarzeń zdefiniowanych na poziomie podstawowym lub relacyjnym. Nie należy uzyskiwać bezpośredniego dostępu do zasobów rejestrowania; są one nadal wewnętrzne.
    • IRawSqlCommandBuilder usługa została zmieniona z pojedynczej usługi na usługę o określonym zakresie
    • IMigrationsSqlGenerator usługa została zmieniona z pojedynczej usługi na usługę o określonym zakresie
  • https://github.com/dotnet/efcore/pull/14706
    • Infrastruktura do tworzenia poleceń relacyjnych została upubliczniona, dzięki czemu może być bezpiecznie używana przez dostawców i lekko refaktoryzowana.
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader usługa o określonym zakresie została zmieniona na usługę przejściową
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator usługa o określonym zakresie została zmieniona na pojedynczą usługę
    • ISingletonUpdateSqlGenerator Ponadto usunięto
  • https://github.com/dotnet/efcore/pull/15067
    • Wiele kodu wewnętrznego, który był używany przez dostawców, został upubliczniony
    • Nie powinien już być niezgodny do odniesienia IndentedStringBuilder , ponieważ został on uwzględniony z miejsc, które go odsłoniły
    • Użycie elementu NonCapturingLazyInitializer należy zastąpić LazyInitializer z listy BCL
  • https://github.com/dotnet/efcore/pull/14608
    • Ta zmiana jest w pełni omówiona w dokumencie zmiany powodujące niezgodność aplikacji. W przypadku dostawców może to mieć większy wpływ, ponieważ testowanie platformy EF Core może często prowadzić do osiągnięcia tego problemu, więc infrastruktura testowa zmieniła się, aby ta mniej prawdopodobna.
  • https://github.com/dotnet/efcore/issues/13961
    • EntityMaterializerSource została uproszczona
  • https://github.com/dotnet/efcore/pull/14895
    • Funkcja StartsWith translacji zmieniła się w sposób, w jaki dostawcy mogą chcieć/muszą reagować
  • https://github.com/dotnet/efcore/pull/15168
    • Zmieniono usługi zestawu konwencji. Dostawcy powinni teraz dziedziczyć z elementu "ProviderConventionSet" lub "RelationalConventionSet".
    • Dostosowania można dodawać za pośrednictwem IConventionSetCustomizer usług, ale jest to przeznaczone do użycia przez inne rozszerzenia, a nie przez dostawców.
    • Należy rozpoznać konwencje używane w czasie wykonywania z IConventionSetBuilder.
  • https://github.com/dotnet/efcore/pull/15288
    • Rozmieszczanie danych zostało refaktoryzowane w publicznym interfejsie API, aby uniknąć konieczności używania typów wewnętrznych. Powinno to mieć wpływ tylko na dostawców nierelacyjnych, ponieważ rozmieszczanie jest obsługiwane przez podstawową klasę relacyjną dla wszystkich dostawców relacyjnych.

2.1 ---> 2.2

Zmiany tylko do testowania

  • https://github.com/dotnet/efcore/pull/12057 — Zezwalaj na dostosowywanie ograniczników SQL w testach
    • Testowanie zmian, które zezwalają na porównania zmiennoprzecinkowe inne niż ścisłe w module BuiltInDataTypesTestBase
    • Testowanie zmian, które umożliwiają ponowne używanie testów zapytań z różnymi ogranicznikami SQL
  • https://github.com/dotnet/efcore/pull/12072 — Dodawanie testów DbFunction do testów specyfikacji relacyjnej
    • Tak, aby te testy mogły być uruchamiane dla wszystkich dostawców baz danych
  • https://github.com/dotnet/efcore/pull/12362 - Czyszczenie testów asynchronicznych
    • Usuń Wait wywołania, niepotrzebne asynchroniczne i zmieniono nazwę niektórych metod testowych
  • https://github.com/dotnet/efcore/pull/12666 - Ujednolicanie infrastruktury testowania rejestrowania
    • Dodano CreateListLoggerFactory i usunięto poprzednią infrastrukturę rejestrowania, która będzie wymagać od dostawców korzystania z tych testów w celu reagowania
  • https://github.com/dotnet/efcore/pull/12500 — Uruchamianie większej liczby testów zapytań zarówno synchronicznie, jak i asynchronicznie
    • Nazwy testów i faktoring uległy zmianie, co będzie wymagać od dostawców korzystania z tych testów w celu reagowania
  • https://github.com/dotnet/efcore/pull/12766 — Zmienianie nazw nawigacji w modelu ComplexNavigations
    • Dostawcy korzystający z tych testów mogą potrzebować reakcji
  • https://github.com/dotnet/efcore/pull/12141 — Zwracanie kontekstu do puli zamiast dysponowania w testach funkcjonalnych
    • Ta zmiana obejmuje refaktoryzację testów, która może wymagać od dostawców reagowania

Testowanie i zmiany kodu produktu

  • https://github.com/dotnet/efcore/pull/12109 - Konsolidowanie metod RelationalTypeMapping.Clone
    • Zmiany w wersji 2.1 na RelationalTypeMapping dozwolone w celu uproszczenia w klasach pochodnych. Nie wierzymy, że to było łamiące dla dostawców, ale dostawcy mogą skorzystać z tej zmiany w klasach mapowania typów pochodnych.
  • https://github.com/dotnet/efcore/pull/12069 - Oznakowane lub nazwane zapytania
    • Dodaje infrastrukturę do tagowania zapytań LINQ i wyświetlanie tych tagów jako komentarze w języku SQL. Może to wymagać od dostawców reagowania na generowanie kodu SQL.
  • https://github.com/dotnet/efcore/pull/13115 - Obsługa danych przestrzennych za pośrednictwem NTS
    • Umożliwia zarejestrowanie mapowań typów i translatorów składowych poza dostawcą
      • Dostawcy muszą wywoływać bazę danych. FindMapping() w implementacji ITypeMappingSource, aby działała
    • Postępuj zgodnie z tym wzorcem, aby dodać obsługę przestrzenną do dostawcy, który jest spójny między dostawcami.
  • https://github.com/dotnet/efcore/pull/13199 — Dodawanie rozszerzonego debugowania na potrzeby tworzenia dostawcy usług
    • Umożliwia rozszerzenie DbContextOptionsExtensions w celu zaimplementowania nowego interfejsu, który może pomóc ludziom zrozumieć, dlaczego wewnętrzny dostawca usług jest ponownie kompilowany
  • https://github.com/dotnet/efcore/pull/13289— Dodaje interfejs API Połączenie do użycia przez kontrole kondycji
    • To żądanie ściągnięcia dodaje pojęcie CanConnect , które będzie używane przez ASP.NET Core kontroli kondycji w celu określenia, czy baza danych jest dostępna. Domyślnie implementacja relacyjna po prostu wywołuje metodę Exist, ale dostawcy mogą w razie potrzeby zaimplementować coś innego. Dostawcy nierelacyjny muszą zaimplementować nowy interfejs API, aby można było używać kontroli kondycji.
  • https://github.com/dotnet/efcore/pull/13306 - Zaktualizuj base RelationalTypeMapping, aby nie ustawić rozmiaru DbParameter
    • Zatrzymaj ustawienie Rozmiar domyślnie, ponieważ może to spowodować obcięcie. Dostawcy mogą wymagać dodania własnej logiki, jeśli należy ustawić rozmiar.
  • https://github.com/dotnet/efcore/pull/13372 - RevEng: Zawsze określ typ kolumny dla kolumn dziesiętnych
    • Zawsze konfiguruj typ kolumny dla kolumn dziesiętnych w kodzie szkieletowym, a nie konfiguruj według konwencji.
    • Dostawcy nie powinni wymagać żadnych zmian na ich końcu.
  • https://github.com/dotnet/efcore/pull/13469 - Dodaje CaseExpression do generowania wyrażeń CASE SQL
  • https://github.com/dotnet/efcore/pull/13648 — Dodaje możliwość określania mapowań typów w usłudze SqlFunctionExpression w celu poprawy wnioskowania typu magazynu argumentów i wyników.