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
book
wordt 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-only
scenario - Ze zijn
quicker to execute
omdat 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 default
als het resultaatcontains entity
Voorbeeld:
In de volgende query, die een
anonymous type
retourneert, worden de instanties vanBook
in de resultatensetwill be tracked
using (var context = new BookContext()) { var book = context.Books.Select(b => new { Book = b, Authors = b.Authors.Count() }); }
Als het resultaat set
does not
elke bevatentity
types, danno tracking
wordt uitgevoerd
Voorbeeld:
In de volgende query, die een
anonymous type
retourneert met enkele waarden van de entiteit (maarno instances
van 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 }); }