本頁介紹了一些較少見的 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),以確保每個測試都能獲得新的服務提供者。