Sobes.tech
Middle

Hoe wordt caching gedaan in Entity Framework Core?

sobes.tech AI

Antwoord van AI

Entity Framework Core (EF Core) heeft een twee niveaus caching:

  1. Context cache (Identiteitsoplossing): Dit is de eerste niveau cache. EF Core volgt de entiteiten die geladen zijn in de huidige DbContext. Als tijdens een query EF Core een entiteit met dezelfde sleutelwaarde in het geheugen vindt, geeft het de bestaande instantie terug in plaats van gegevens uit de database op te vragen.

    • Voorkomt dat dezelfde gegevens meerdere keren worden geladen in één context.
    • Actualiseert automatisch de instanties in het geheugen wanneer hun status verandert (toevoegen, wijzigen, verwijderen).
    • Werkt standaard en vereist geen speciale configuratie.
  2. Query cache (Query caching): Dit is de tweede niveau cache. EF Core cachet de uitvoeringsplannen van gegenereerde SQL-queries. Wanneer dezelfde query wordt uitgevoerd, kan EF Core een al gecompileerd plan gebruiken, waardoor hercompilatie van SQL wordt vermeden.

    • Optimaliseert de prestaties van herhaalde queries met dezelfde structuur (maar verschillende parameters).
    • Cachet niet de queryresultaten (de data zelf), maar het uitvoeringsplan.
    • Wordt beheerd door interne mechanismen van EF Core en is niet direct toegankelijk voor externe configuratie of opschoning.

Voorbeeld van werking van de context cache:

// aangenomen dat een User met Id == 1 bestaat in de database
using (var context = new AppDbContext())
{
    // Eerste laden - query naar de database
    var user1 = context.Users.FirstOrDefault(u => u.Id == 1);
    Console.WriteLine($"User1 geladen: {user1.Name}");

    // Tweede laden - het object wordt uit de context cache gehaald
    var user2 = context.Users.FirstOrDefault(u => u.Id == 1);
    Console.WriteLine($"User2 geladen: {user2.Name}");

    // user1 en user2 verwijzen naar hetzelfde object in geheugen
    Console.WriteLine($"Zijn user1 en user2 hetzelfde object? {ReferenceEquals(user1, user2)}");
}

Het is belangrijk te begrijpen dat EF Core geen ingebouwde data cache op applicatieniveau biedt (bijvoorbeeld voor het opslaan van vaak gebruikte data tussen verzoeken of gebruikers). Voor dergelijke scenario's worden meestal externe oplossingen gebruikt zoals Redis, IMemoryCache of andere gedistribueerde caches.