高级测试主题

本页介绍了与测试 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)以确保每个测试都获得一个新的服务提供商。