Avancerade testämnen

På den här sidan beskrivs några mindre vanliga ämnen som rör testning av EF Core-program.

EnableServiceProviderCaching

EF Core använder en intern tjänstleverantör för att hantera tjänster som krävs för databasåtgärder, inklusive frågekompilering, modellskapande och andra kärnfunktioner. Som standard cachelagrar EF Core dessa interna tjänstleverantörer för att förbättra prestanda när flera DbContext instanser delar samma konfiguration.

Metoden EnableServiceProviderCaching styr om EF Core cachelagrar den interna tjänstleverantören:

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

Standardbeteende: Cachelagring av tjänstleverantörer är aktiverat som standard (true). Detta innebär att:

  • Tjänstleverantörer lagras i cache och återanvänds över DbContext instanser med samma konfiguration
  • Bättre prestanda för program som skapar många DbContext instanser
  • Lägre minneskostnader när flera kontexter delar konfigurationer

När du inaktiverar cachelagring: Om du inaktiverar cachelagring av tjänstleverantörer blir det mycket långsammare DbContext att skapa och i de allra flesta fall rekommenderas standardbeteendet. Om det finns problem med felaktiga interna tjänster som används bör de åtgärdas på ett annat sätt. Men om du ersätter tjänster i testsyfte kan du inaktivera cachelagring av tjänstleverantörer (false) för att säkerställa att varje test får en ny tjänstleverantör.