Entity Framework
Śledzenie a brak śledzenia
Szukaj…
Uwagi
Zachowanie śledzenia kontroluje, czy Entity Framework zachowa informacje o instancji encji w swoim module do śledzenia zmian. Jeśli jednostka jest śledzona, wszelkie wykryte w niej zmiany zostaną utrwalone w bazie danych podczas SaveChanges()
.
Śledzenie zapytań
- Domyślnie zapytania zwracające typy jednostek są śledzone
- Oznacza to, że możesz wprowadzać zmiany w tych instancjach encji, a zmiany te
SaveChanges()
przezSaveChanges()
Przykład:
- Zmiana oceny
book
zostanie wykryta i utrwalona w bazie danych podczasSaveChanges()
.
using (var context = new BookContext())
{
var book = context.Books.FirstOrDefault(b => b.BookId == 1);
book.Rating = 5;
context.SaveChanges();
}
Zapytania bez śledzenia
- Żadne zapytania śledzące nie są przydatne, gdy wyniki są używane w scenariuszu
read-only
doread-only
- Są
quicker to execute
ponieważ nie trzeba konfigurować informacji o śledzeniu zmian
Przykład:
using (var context = new BookContext())
{
var books = context.Books.AsNoTracking().ToList();
}
Za pomocą EF Core 1.0 możesz także zmienić domyślne zachowanie śledzenia na poziomie context instance
.
Przykład:
using (var context = new BookContext())
{
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var books = context.Books.ToList();
}
Śledzenie i prognozy
- Nawet jeśli typ wyniku zapytania nie jest typem encji, jeśli wynik
contains entity
typycontains entity
, nadal będątracked by default
Przykład:
W poniższym zapytaniu, które zwraca
anonymous type
, instancjeBook
w zestawie wynikówwill be tracked
using (var context = new BookContext()) { var book = context.Books.Select(b => new { Book = b, Authors = b.Authors.Count() }); }
Jeśli zestaw wyników
does not
zawiera żadnych typówentity
, wówczasno tracking
jest wykonywane
Przykład:
W poniższym zapytaniu, które zwraca
anonymous type
z niektórymi wartościami z encji (aleno instances
rzeczywistego typuentity
), nie jest wykonywane śledzenie .using (var context = new BookContext()) { var book = context.Books.Select(b => new { Id = b.BookId, PublishedDate = b.Date }); }