本页介绍了与测试 EF Core 应用程序相关的一些不太常见的主题。
EnableServiceProviderCaching (启用服务提供者缓存)
EF Core 使用内部服务提供商来管理数据库作所需的服务,包括查询编译、模型构建和其他核心功能。 默认情况下,当多个 DbContext 实例共享同一配置时,EF Core 会缓存这些内部服务提供商以提高性能。
该方法 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)以确保每个测试都获得一个新的服务提供商。