Roadmap › Entity Framework (EF6 & EF Core) › Module: Querying
Lessons in this course (15)
7. Querying, tracking vs no-tracking
Basic★ Must knowLesson 7 of 15
csharp
var c = await db.Customers.FindAsync(5); // checks the change tracker first, then DB
var active = await db.Customers.Where(x => x.IsActive).OrderBy(x => x.Name).ToListAsync(ct);
// Read-only: skip change tracking (faster, less memory)
var list = await db.Products.AsNoTracking().Where(p => p.Price > 100).ToListAsync(ct);
// Projection — best for read models; selects only needed columns, never tracked
var dtos = await db.Orders
.Where(o => o.CreatedAt >= from)
.Select(o => new OrderDto(o.Id, o.Customer.Name, o.Total))
.ToListAsync(ct);AsNoTrackingWithIdentityResolution() — no tracking but still one instance per key. Configure default: UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking) for read-heavy contexts.