次の方法で共有


高度なテストに関するトピック

このページでは、EF Core アプリケーションのテストに関連するあまり一般的でないトピックについて説明しました。

EnableServiceProviderCaching

EF Core では、内部サービス プロバイダーを使用して、クエリのコンパイル、モデルの構築、その他のコア機能など、データベース操作に必要なサービスを管理します。 既定では、EF Core は、複数の DbContext インスタンスが同じ構成を共有する場合にパフォーマンスを向上させるために、これらの内部サービス プロバイダーをキャッシュします。

EnableServiceProviderCaching メソッドは、EF Core が内部サービス プロバイダーをキャッシュするかどうかを制御します。

public class ApplicationDbContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder
            .EnableServiceProviderCaching(false)
            .UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Test");
    }
}

既定の動作: サービス プロバイダーのキャッシュは 既定で有効になっています (true)。 これは、以下のようなことを意味します。

  • サービス プロバイダーはキャッシュされ、同じ構成の DbContext インスタンス間で再利用されます
  • 多数の DbContext インスタンスを作成するアプリケーションのパフォーマンスの向上
  • 複数のコンテキストが構成を共有する場合のメモリ オーバーヘッドの削減

キャッシュを無効にする場合: サービス プロバイダーのキャッシュを無効にすると、 DbContext の作成が大幅に遅くなり、ほとんどの場合、既定の動作が推奨されます。 使用されている内部サービスが正しくない問題がある場合は、別の方法で修正する必要があります。 ただし、テスト目的でサービスを置き換える場合は、サービス プロバイダーのキャッシュ (false) を無効にして、各テストで新しいサービス プロバイダーを確実に取得できます。