プロバイダーに影響を与える変更

このページには、他のデータベース プロバイダー作成者の対応が必要な場合がある、EF Core リポジトリで行われた pull request へのリンクが含まれています。 その目的は、プロバイダーを新しいバージョンに更新するときに、既存のサード パーティ データベース プロバイダーの作成者に開始点を提供することです。

このログは、2.1 から 2.2 への変更から開始します。 2.1 より前は、問題と pull request に対して providers-bewareproviders-fyi ラベルを使用していました。

2.2 ---> 3.x

アプリケーションレベルの破壊的変更の多くは、プロバイダーにも影響することに注意してください。

  • https://github.com/dotnet/efcore/pull/14022
    • 古い API を削除し、省略可能なパラメーター オーバーロードを折りたたみました
    • DatabaseColumn.GetUnderlyingStoreType() を削除しました
  • https://github.com/dotnet/efcore/pull/14589
    • 古い API を削除しました
  • https://github.com/dotnet/efcore/pull/15044
    • 基本実装のいくつかのバグを修正するために必要だった動作変更により、CharTypeMapping のサブクラスが破損した可能性があります。
  • https://github.com/dotnet/efcore/pull/15090
    • IDatabaseModelFactory の基底クラスを追加し、将来の破壊を軽減するためにパラメーター オブジェクトを使用するように更新しました。
  • https://github.com/dotnet/efcore/pull/15123
    • 将来の破壊を軽減するために、MigrationsSqlGenerator でパラメーター オブジェクトを使用しました。
  • https://github.com/dotnet/efcore/pull/14972
    • ログ レベルの明示的構成で、プロバイダーで使用されている可能性がある API に対していくつかの変更が必要でした。 具体的には、プロバイダーでロギング インフラストラクチャが直接使用されている場合、この変更によってその使用ができなくなる可能性があります。 また、今後 (公開される) そのインフラストラクチャを使用するプロバイダーは、LoggingDefinitions または RelationalLoggingDefinitions から派生する必要があります。 例については、SQL Server とインメモリ プロバイダーを参照してください。
  • https://github.com/dotnet/efcore/pull/15091
    • Core、Relational、および Abstractions リソース文字列が公開されました。
    • CoreLoggerExtensionsRelationalLoggerExtensions が公開されました。 プロバイダーは、コアまたはリレーショナル レベルで定義されているイベントをログに記録する際、これらの API を使用する必要があります。 ログ リソースに直接アクセスしないでください。これらはまだ内部です。
    • IRawSqlCommandBuilder がシングルトン サービスからスコープ付きサービスに変更されました
    • IMigrationsSqlGenerator がシングルトン サービスからスコープ付きサービスに変更されました
  • https://github.com/dotnet/efcore/pull/14706
    • リレーショナル コマンドを構築するためのインフラストラクチャは公開されたため、プロバイダーで安全に使用でき、若干のリファクタリングも可能になりました。
  • https://github.com/dotnet/efcore/pull/14733
    • ILazyLoader がスコープ付きサービスから一時的なサービスに変更されました
  • https://github.com/dotnet/efcore/pull/14610
    • IUpdateSqlGenerator がスコープ付きサービスからシングルトン サービスに変更されました
    • また、ISingletonUpdateSqlGenerator が削除されました
  • https://github.com/dotnet/efcore/pull/15067
    • プロバイダーによって使用されていた内部コードの多くが公開されました
    • IndentedStringBuilder は公開された場所から取り除かれたため、参照する必要はなくなりました
    • NonCapturingLazyInitializer の使用は、BCL の LazyInitializer に置き換える必要があります
  • https://github.com/dotnet/efcore/pull/14608
    • この変更は、アプリケーションの破壊的変更のドキュメントで詳しく説明されています。 プロバイダーの場合、EF Core のテストではこの問題がよく発生することがあるので、より影響が大きい場合があります。そのため、その可能性を低くするためにテスト インフラストラクチャが変更されました。
  • https://github.com/dotnet/efcore/issues/13961
    • EntityMaterializerSource が簡略化されました
  • https://github.com/dotnet/efcore/pull/14895
    • StartsWith 変換は、プロバイダーの対応が必要な方法で変更されました
  • https://github.com/dotnet/efcore/pull/15168
    • 規則セット サービスが変更されました。 プロバイダーは、"ProviderConventionSet" または "RelationalConventionSet" から継承することが必要になりました。
    • カスタマイズは IConventionSetCustomizer サービスを通じて追加できますが、これはプロバイダーではなく、他の拡張機能で使用されることを意図しています。
    • 実行時に使用される規則は、IConventionSetBuilder から解決する必要があります。
  • https://github.com/dotnet/efcore/pull/15288
    • 内部型を使用しなくていいように、データのシード処理はパブリック API にリファクタリングされました。 シード処理は、すべてのリレーショナル プロバイダーでは基底リレーショナル クラスによって処理されるので、この影響を受けるのは非リレーショナル プロバイダーのみです。

2.1 ---> 2.2

テスト専用の変更

  • https://github.com/dotnet/efcore/pull/12057 - カスタマイズ可能な SQL 区切り文字をテストで許可します
    • BuiltInDataTypesTestBase で厳密でない浮動小数点比較を許可するテスト変更
    • 異なる SQL 区切り文字でクエリ テストを再使用することを許可するテスト変更
  • https://github.com/dotnet/efcore/pull/12072 - リレーショナル仕様テストに DbFunction テストを追加
    • これにより、これらのテストをすべてのデータベース プロバイダーに対して実行できます
  • https://github.com/dotnet/efcore/pull/12362 - 非同期テストのクリーンアップ
    • Wait 呼び出し、不要な非同期を削除し、一部のテスト メソッドを名前変更しました
  • https://github.com/dotnet/efcore/pull/12666 - ログ テスト インフラストラクチャを結合
    • CreateListLoggerFactory を追加し、以前のログ インフラストラクチャを一部削除しました。これにより、これらのテストを使用するプロバイダーで対応が必要になります。
  • https://github.com/dotnet/efcore/pull/12500 - 同期と非同期の両方でより多くのクエリ テストを実行
    • テスト名とファクタリングが変更されました。これらのテストを使用するプロバイダーで対応が必要になります
  • https://github.com/dotnet/efcore/pull/12766 - ComplexNavigations モデルでナビゲーションを名前変更
    • これらのテストを使用するプロバイダーで対応が必要な場合があります
  • https://github.com/dotnet/efcore/pull/12141 - 機能テストで破棄する代わりにプールにコンテキストを返す
    • この変更にはいくつかのテスト リファクタリングが含まれているため、プロバイダーで対応が必要な場合があります

テストと製品コードの変更

  • https://github.com/dotnet/efcore/pull/12109 - RelationalTypeMapping.Clone メソッドの結合
    • RelationalTypeMapping に対する 2.1 での変更により、派生クラスの簡略化が可能になりました。 これがプロバイダーにとって破壊的であったとは考えられませんが、プロバイダーは派生型マッピング クラスでこの変更を利用できます。
  • https://github.com/dotnet/efcore/pull/12069 - タグ付きまたは名前付きクエリ
    • LINQ クエリにタグを付け、それらのタグを SQL にコメントとして表示させるインフラストラクチャを追加しています。 SQL の生成でプロバイダーの対応が必要な場合があります。
  • https://github.com/dotnet/efcore/pull/13115 - NTS を使用して空間データをサポートする
    • 型マッピングとメンバー トランスレーターをプロバイダーの外部で登録できます
      • これを機能させるには、プロバイダーは ITypeMappingSource の実装で base.FindMapping() を呼び出す必要があります
    • このパターンに従って、プロバイダー間で一貫性のある空間サポートをプロバイダーに追加します。
  • https://github.com/dotnet/efcore/pull/13199 - サービス プロバイダーの作成に強化されたデバックを追加
    • DbContextOptionsExtensions で、内部サービス プロバイダーが再ビルドされる理由を理解するのに役立つ新しいインターフェイスが実装されるのを許可します
  • https://github.com/dotnet/efcore/pull/13289 - 正常性チェックで使用される CanConnect API を追加
    • この PR により、データベースが使用可能かどうかを判断するために ASP.NET Core の正常性チェックで使用される CanConnect の概念が追加されます。 既定では、リレーショナル実装では単に Exist が呼び出されますが、プロバイダーは必要に応じて異なるものを実装できます。 非リレーショナル プロバイダーは、正常性チェックを使用するために新しい API を実装する必要があります。
  • https://github.com/dotnet/efcore/pull/13306 - DbParameter Size を設定しないように基底の RelationalTypeMapping を更新
    • 切り捨てが発生する可能性があるため、既定での Size の設定を停止します。 Size を設定する必要がある場合、プロバイダーは独自のロジックを追加する必要がある場合があります。
  • https://github.com/dotnet/efcore/pull/13372 - RevEng: decimal 列の列の型を常に指定する
    • 規則によって構成するのではなく、常に decimal 列の列の型をスキャフォールディングされたコードで構成します。
    • プロバイダー側では、何の変更も必要ありません。
  • https://github.com/dotnet/efcore/pull/13469 - SQL CASE 式を生成するための CaseExpression を追加
  • https://github.com/dotnet/efcore/pull/13648 - 引数と結果のストア型推論を向上させるために、SqlFunctionExpression に型マッピングを指定する機能を追加。