Sobes.tech
Middle

Czym jest śledzenie w Entity Framework?

sobes.tech AI

Odpowiedź od AI

Śledzenie (Entity Tracking) to mechanizm w Entity Framework Core, który monitoruje zmiany w obiektach encji załadowanych z bazy danych. Kontekst przechowuje informacje o stanie każdej załadowanej encji i może generować zapytania SQL do aktualizacji bazy danych podczas zapisywania zmian (DbContext.SaveChanges()).

Główne stany encji:

  • Added: Encja została dodana do kontekstu, ale jeszcze nie istnieje w bazie danych.
  • Unchanged: Encja została załadowana z bazy danych i jej właściwości nie zostały zmienione.
  • Modified: Niektóre właściwości encji zostały zmienione od momentu jej załadowania z bazy danych.
  • Deleted: Encja została oznaczona do usunięcia z bazy danych.
  • Detached: Encja nie jest śledzona przez kontekst.

Domyślnie encje są śledzone podczas pracy z zapytaniami LINQ. Pozwala to Entity Framework automatycznie określić, które zmiany należy zapisać.

Przykład jawnego wskazania śledzenia:

// Śledzone zapytanie
var trackedUser = context.Users.FirstOrDefault(u => u.Id == 1);

// Nieśledzone zapytanie
var untrackedUser = context.Users.AsNoTracking().FirstOrDefault(u => u.Id == 2);

Wyłączenie śledzenia za pomocą AsNoTracking() może poprawić wydajność podczas wykonywania zapytań, jeśli nie trzeba zapisywać zmian w bazie danych, ponieważ EF nie zużywa zasobów na śledzenie stanu encji.