Ako sa vykonáva cacheovanie v Entity Framework Core?
sobes.tech AI
Odpoveď od AI
Entity Framework Core (EF Core) má dvojúrovňové cache:
-
Cache kontextu (Riešenie identity): Ide o prvú úroveň cache. EF Core sleduje entity načítané v aktuálnom
DbContext. Ak počas dotazu EF Core nájde entitu so rovnakou kľúčovou hodnotou v pamäti, vráti existujúci príklad namiesto dopytovania databázy.- Zabráni opakovanému načítavaniu tých istých dát v jednom kontexte.
- Automaticky aktualizuje inštancie v pamäti, keď sa ich stav zmení (pridanie, zmena, odstránenie).
- Funguje štandardne a nevyžaduje špeciálnu konfiguráciu.
-
Cache dopytov (Query Caching): Ide o druhú úroveň cache. EF Core cache-uje plány vykonávania generovaných SQL dopytov. Keď sa vykoná ten istý dopyt, EF Core môže použiť už skompilovaný plán, čím sa vyhne opätovnej kompilácii SQL.
- Optimalizuje výkon opakujúcich sa dopytov so rovnakou štruktúrou (ale rôznymi parametrami).
- Neukladá výsledok dopytu (dáta), ale plán jeho vykonávania.
- Je riadený internými mechanizmami EF Core a nie je priamo dostupný pre externú konfiguráciu alebo čistenie.
Príklad fungovania cache kontextu:
// predpokladáme, že v databáze existuje používateľ s Id == 1
using (var context = new AppDbContext())
{
// Prvé načítanie - dopyt do DB
var user1 = context.Users.FirstOrDefault(u => u.Id == 1);
Console.WriteLine($"User1 načítaný: {user1.Name}");
// Druhé načítanie - objekt je získaný z cache kontextu
var user2 = context.Users.FirstOrDefault(u => u.Id == 1);
Console.WriteLine($"User2 načítaný: {user2.Name}");
// user1 a user2 odkazujú na ten istý objekt v pamäti
Console.WriteLine($"Sú user1 a user2 rovnaký odkaz na objekt? {ReferenceEquals(user1, user2)}");
}
Dôležité je pochopiť, že EF Core neponúka zabudované cache dát na úrovni aplikácie (napríklad na ukladanie často používaných dát medzi požiadavkami alebo používateľmi). Pre takéto scenáre sa zvyčajne používajú externé riešenia ako Redis, IMemoryCache alebo iné distribuované cache.