Sdílet prostřednictvím


Změny s dopadem na poskytovatele

Tato stránka obsahuje odkazy na žádosti o přijetí změn provedené v úložišti EF Core, které můžou vyžadovat reakce autorů jiných poskytovatelů databáze. Záměrem je poskytnout autorům stávajících poskytovatelů databází třetích stran výchozí bod při aktualizaci poskytovatele na novou verzi.

Tento protokol spouštíme se změnami z verze 2.1 na 2.2. Před verzí 2.1 jsme použili providers-beware popisky a providers-fyi problémy a žádosti o přijetí změn.

2.2 ---> 3.x

Mějte na paměti, že mnoho zásadních změn na úrovni aplikace bude mít vliv také na poskytovatele.

  • https://github.com/dotnet/efcore/pull/14022
    • Odebraná zastaralá rozhraní API a sbalená přetížení volitelných parametrů
    • Odebrání DatabaseColumn.GetUnderlyingStoreType()
  • https://github.com/dotnet/efcore/pull/14589
    • Odebraná zastaralá rozhraní API
  • https://github.com/dotnet/efcore/pull/15044
    • Podtřídy CharTypeMapping mohly být poškozeny kvůli změnám chování potřebným k opravě několika chyb v základní implementaci.
  • https://github.com/dotnet/efcore/pull/15090
    • Přidali jsme základní třídu pro IDatabaseModelFactory a aktualizovali ji tak, aby používala objekt paramateru ke zmírnění budoucích konců.
  • https://github.com/dotnet/efcore/pull/15123
    • Použití objektů parametrů v MigrationsSqlGenerator ke zmírnění budoucích konců
  • https://github.com/dotnet/efcore/pull/14972
    • Explicitní konfigurace úrovní protokolu vyžadovala určité změny rozhraní API, která můžou poskytovatelé používat. Konkrétně platí, že pokud poskytovatelé používají infrastrukturu protokolování přímo, může tato změna toto použití přerušit. Poskytovatelé, kteří používají infrastrukturu (která bude veřejná), budou muset odvodit nebo LoggingDefinitionsRelationalLoggingDefinitions. Příklady najdete v sql Serveru a poskytovatelích v paměti.
  • https://github.com/dotnet/efcore/pull/15091
    • Řetězce prostředků Jádra, Relační a Abstrakce jsou teď veřejné.
    • CoreLoggerExtensions a RelationalLoggerExtensions jsou teď veřejné. Poskytovatelé by tato rozhraní API měli používat při protokolování událostí definovaných na základní nebo relační úrovni. Nepřistupujte k prostředkům protokolování přímo; jsou stále interní.
    • IRawSqlCommandBuilder došlo ke změně z jedné služby na službu s vymezeným oborem.
    • IMigrationsSqlGenerator došlo ke změně z jedné služby na službu s vymezeným oborem.
  • https://github.com/dotnet/efcore/pull/14706
    • Infrastruktura pro vytváření relačních příkazů byla veřejná, takže ji můžou poskytovatelé bezpečně používat a mírně refaktorovat.
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader došlo ke změně služby s vymezeným oborem na přechodnou službu.
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator změnila se ze služby s vymezeným oborem na službu singleton
    • ISingletonUpdateSqlGenerator Byl také odebrán.
  • https://github.com/dotnet/efcore/pull/15067
    • Zpřístupnilo se mnoho interního kódu, který používali poskytovatelé.
    • Již by neměl být necssary odkazovat IndentedStringBuilder , protože byl faktorován z míst, která jej odhalila.
    • NonCapturingLazyInitializer Použití by mělo být nahrazeno LazyInitializer ze seznamu BCL.
  • https://github.com/dotnet/efcore/pull/14608
    • Tato změna je plně popsána v dokumentu o zásadních změnách aplikace. U poskytovatelů to může mít větší dopad, protože testování EF Core může často vést k dosažení tohoto problému, takže se změnila testovací infrastruktura, aby se tato méně pravděpodobná.
  • https://github.com/dotnet/efcore/issues/13961
    • EntityMaterializerSource byla zjednodušena.
  • https://github.com/dotnet/efcore/pull/14895
    • Překlad StartsWith se změnil způsobem, který můžou poskytovatelé chtít nebo potřebují reagovat.
  • https://github.com/dotnet/efcore/pull/15168
    • Služby sady konvencí se změnily. Zprostředkovatelé by teď měli dědit z providerConventionSet nebo RelationalConventionSet.
    • Vlastní nastavení je možné přidávat prostřednictvím IConventionSetCustomizer služeb, ale je určená k použití jinými rozšířeními, nikoli poskytovateli.
    • Konvence používané za běhu by měly být vyřešeny z IConventionSetBuilder.
  • https://github.com/dotnet/efcore/pull/15288
    • Seeding dat byl refaktorován do veřejného rozhraní API, aby se zabránilo nutnosti používat interní typy. To by mělo mít vliv pouze na nerelační zprostředkovatele, protože se počáteční zpracování provádí základní relační třídou pro všechny relační zprostředkovatelé.

2.1 ---> 2.2

Změny jen pro testování

  • https://github.com/dotnet/efcore/pull/12057 – Povolit přizpůsobitelné delimetry SQL v testech
    • Testování změn, které umožňují ne striktní porovnání s plovoucí desetinou čárkou v BuiltInDataTypesTestBase
    • Testování změn, které umožňují opětovné použití testů dotazů s různými delimetry SQL
  • https://github.com/dotnet/efcore/pull/12072 - Přidání testů DbFunction do testů relační specifikace
    • Tyto testy je možné spouštět u všech poskytovatelů databáze.
  • https://github.com/dotnet/efcore/pull/12362 – Asynchronní testovací vyčištění
    • Odebrání Wait volání, nepotřebné asynchronní metody a přejmenování některých testovacích metod
  • https://github.com/dotnet/efcore/pull/12666 – Sjednocení infrastruktury testů protokolování
    • Přidání CreateListLoggerFactory a odebrání některé předchozí infrastruktury protokolování, která bude vyžadovat, aby poskytovatelé pomocí těchto testů mohli reagovat.
  • https://github.com/dotnet/efcore/pull/12500 – Spusťte více testů dotazů synchronně i asynchronně.
    • Změnily se názvy testů a faktoring, které budou vyžadovat, aby poskytovatelé pomocí těchto testů reagovali.
  • https://github.com/dotnet/efcore/pull/12766 - Přejmenování navigace v modelu ComplexNavigations
    • Zprostředkovatelé používající tyto testy možná budou muset reagovat.
  • https://github.com/dotnet/efcore/pull/12141 – Vrátí kontext do fondu místo toho, aby se v funkčních testech vystavil.
    • Tato změna zahrnuje některé refaktoringy testů, které můžou vyžadovat, aby poskytovatelé reagovali.

Testování a změny kódu produktu

  • https://github.com/dotnet/efcore/pull/12109 – Konsolidace metod RelationalTypeMapping.Clone
    • Změny ve verzi 2.1 na relationalTypeMapping umožňovaly zjednodušení v odvozených třídách. Nevěřili jsme, že se jedná o chybu u poskytovatelů, ale můžou poskytovatelé využít tuto změnu v odvozených třídách mapování typů.
  • https://github.com/dotnet/efcore/pull/12069 - Označené nebo pojmenované dotazy
    • Přidá infrastrukturu pro označování dotazů LINQ a tyto značky se zobrazí jako komentáře v SQL. To může vyžadovat, aby poskytovatelé reagovali v generování SQL.
  • https://github.com/dotnet/efcore/pull/13115 - Podpora prostorových dat přes NTS
    • Umožňuje, aby se mapování typů a členové překladatelé zaregistrovali mimo poskytovatele.
      • Zprostředkovatelé musí volat základ. FindMapping() v implementaci ITypeMappingSource, aby fungoval
    • Pokud chcete přidat prostorovou podporu k vašemu poskytovateli, který je konzistentní mezi poskytovateli, postupujte podle tohoto vzoru.
  • https://github.com/dotnet/efcore/pull/13199 - Přidání rozšířeného ladění pro vytvoření poskytovatele služeb
    • Umožňuje DbContextOptionsExtensions implementovat nové rozhraní, které může lidem pomoct pochopit, proč se interní poskytovatel služeb znovu sestavuje.
  • https://github.com/dotnet/efcore/pull/13289– Přidá rozhraní API pro použití pomocí kontrol stavu Připojení
    • Tato žádost o přijetí změn přidává koncept, který CanConnect bude používat ASP.NET základní kontroly stavu k určení, jestli je databáze k dispozici. Ve výchozím nastavení relační implementace pouze volá Exist, ale poskytovatelé mohou v případě potřeby implementovat něco jiného. Nerelační zprostředkovatelé budou muset implementovat nové rozhraní API, aby bylo možné použít kontrolu stavu.
  • https://github.com/dotnet/efcore/pull/13306 – Aktualizujte základní relačníTypeMapping tak, aby nenastavil velikost DbParameter
    • Nastavení Velikost ve výchozím nastavení zastavte, protože může způsobit zkrácení. Poskytovatelé můžou potřebovat přidat vlastní logiku, pokud je potřeba nastavit velikost.
  • https://github.com/dotnet/efcore/pull/13372 - RevEng: Vždy zadat typ sloupce pro desetinné sloupce
    • Vždy konfigurujte typ sloupce pro desetinné sloupce v generovaném kódu místo konfigurace podle konvence.
    • Poskytovatelé by neměli vyžadovat žádné změny na jejich konci.
  • https://github.com/dotnet/efcore/pull/13469 - Přidá CaseExpression pro generování výrazů SQL CASE
  • https://github.com/dotnet/efcore/pull/13648 - Přidá možnost určit mapování typů na SqlFunctionExpression ke zlepšení odvození typu úložiště argumentů a výsledků.