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 }); }