共用方式為


進階測試主題

本頁介紹了一些較少見的 EF Core 應用程式測試主題。

啟用服務提供者快取

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),以確保每個測試都能獲得新的服務提供者。