Jak wydajnie zaktualizować rekord w bazie danych za pomocą Entity Framework

W programowaniu ważna jest nie tylko skuteczność, ale również wydajność. Pokazujemy jak w łatwy sposób zoptymalizować rekord w bazie danych. Pokazujemy przykład aktualizacji statusu zamówienia.

Podejście sprzed EF Core 7

Do wersji 7 Entity Framework można było aktualizować rekord w bazie danych zasadniczo na 2 sposoby:

  • Przez pobranie obiektu, przypisanie nowej wartości i zapisanie obiektu
var order = await _context.Orders.FindAsync(orderId);
order.Status = newStatus;
_context.Orders.Update(order);
await _context SaveChangesAsync();
  • Drugi sposób to wykonanie zapytania SQL
string sql = "UPDATE Orders SET Status = @p0 WHERE Id = @p1";
_context.Database.ExecuteSqlRaw(sql, newStatus, orderId);

Pierwszy sposób nie jest zbyt wydajny, drugi natomiast przy źle zapisanym zapytaniu SQL, zwłaszcza przez początkujących programistów może narazić aplikację na atak SQL Injection. Na szczęście od EF Core 7 mamy sposób, który jest wydajny i bezpieczny:

Podejście wydajne i bezpieczne

await _context.Orders.Where(o => o.Id.Equals(orderId))
    .ExecuteUpdateAsync(s => s.SetProperty(o => o.Status, o => newSatus));


Kontakt z nami

Masz pomysły, uwagi lub pytania?

Liczba wyświetleń: 2

An unhandled error has occurred. Reload 🗙