Entity Framework
Volgen versus niet volgen
Zoeken…
Opmerkingen
Trackinggedrag bepaalt of Entity Framework al dan niet informatie over een entiteitinstantie in de change tracker bewaart. Als een entiteit wordt bijgehouden, blijven wijzigingen die in de entiteit worden gedetecteerd tijdens SaveChanges() in de database.
Zoekopdrachten bijhouden
- Query's die entiteitstypen retourneren, worden standaard bijgehouden
- Dit betekent dat u wijzigingen kunt aanbrengen in die entiteitsinstanties en deze wijzigingen kunt laten behouden door
SaveChanges()
Voorbeeld:
- De wijziging in de
bookwordt gedetecteerd en blijft tijdensSaveChanges()in de database bestaan.
using (var context = new BookContext())
{
var book = context.Books.FirstOrDefault(b => b.BookId == 1);
book.Rating = 5;
context.SaveChanges();
}
No-tracking vragen
- Geen trackingquery's zijn nuttig wanneer de resultaten worden gebruikt in een
read-onlyscenario - Ze zijn
quicker to executeomdat het niet nodig is om trackinginformatie voor wijzigingen in te stellen
Voorbeeld:
using (var context = new BookContext())
{
var books = context.Books.AsNoTracking().ToList();
}
Met EF Core 1.0 kunt u ook het standaard volggedrag op context instance .
Voorbeeld:
using (var context = new BookContext())
{
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var books = context.Books.ToList();
}
Tracking en projecties
- Zelfs als het resultaattype van de zoekopdracht geen entiteitstype is, worden de resultaten
tracked by defaultals het resultaatcontains entity
Voorbeeld:
In de volgende query, die een
anonymous typeretourneert, worden de instanties vanBookin de resultatensetwill be trackedusing (var context = new BookContext()) { var book = context.Books.Select(b => new { Book = b, Authors = b.Authors.Count() }); }Als het resultaat set
does notelke bevatentitytypes, danno trackingwordt uitgevoerd
Voorbeeld:
In de volgende query, die een
anonymous typeretourneert met enkele waarden van de entiteit (maarno instancesvan het daadwerkelijkeentity), is er geen tracking uitgevoerd.using (var context = new BookContext()) { var book = context.Books.Select(b => new { Id = b.BookId, PublishedDate = b.Date }); }