Entity Framework
Отслеживание и отсутствие отслеживания
Поиск…
замечания
Отслеживание поведения контролирует, будет ли Entity Framework хранить информацию об экземпляре сущности в своем трекере изменения. Если объект отслеживается, любые изменения, обнаруженные в объекте, будут сохраняться в базе данных во время SaveChanges() .
Отслеживание запросов
- По умолчанию запросы, возвращающие типы объектов, отслеживаются
- Это означает, что вы можете вносить изменения в эти экземпляры сущности и сохранять эти изменения в
SaveChanges()
Пример :
- Изменения в рейтинге
bookбудут обнаружены и сохранены в базе данных во времяSaveChanges().
using (var context = new BookContext())
{
var book = context.Books.FirstOrDefault(b => b.BookId == 1);
book.Rating = 5;
context.SaveChanges();
}
Запросы без отслеживания
- Запросы на отслеживание не полезны, когда результаты используются в сценарии
read-onlyдляread-only - Они
quicker to executeпотому что нет необходимости настраивать информацию отслеживания изменений
Пример :
using (var context = new BookContext())
{
var books = context.Books.AsNoTracking().ToList();
}
С EF Core 1.0 вы также можете изменить поведение отслеживания по умолчанию на уровне context instance .
Пример :
using (var context = new BookContext())
{
context.ChangeTracker.QueryTrackingBehavior = QueryTrackingBehavior.NoTracking;
var books = context.Books.ToList();
}
Отслеживание и прогнозы
- Даже если тип результата запроса не является типом сущности, если результат
contains entityтипыcontains entityони по-прежнему будутtracked by default
Пример :
В следующем запросе, который возвращает
anonymous type,will be trackedэкземплярыBookв результирующем набореusing (var context = new BookContext()) { var book = context.Books.Select(b => new { Book = b, Authors = b.Authors.Count() }); }Если результат
does notсодержит каких - либоentityтипа, тоno trackingне выполняется
Пример :
В следующем запросе, который возвращает
anonymous typeс некоторыми значениями из объекта (ноno instancesфактического типаentity), отслеживание не выполняется.using (var context = new BookContext()) { var book = context.Books.Select(b => new { Id = b.BookId, PublishedDate = b.Date }); }