/// Получить первоначальные значения (когда сущность была загружена).
PropertyValues originalProps = entry.OriginalValues;
// Получить текущие значения (обновленные кодом выше).
PropertyValues currentProps = entry.CurrentValues;
// Получить текущие значения из хранилища данных.
// Примечание: это требует еще одного обращения к базе данных
//PropertyValues databaseProps = entry.GetDatabaseValues;
}
Устойчивость подключений
Кратковременные ошибки трудны в отладке и еще более трудны в воспроизведении. К счастью, многие поставщики баз данных имеют внутренний механизм повтора для сбоев в системе баз данных (проблемы с tempdb
SqlServerRetryingExecutionStrategy, и если он включен в объекте производного от DbContext класса через DbContextOptions, то EF Core автоматически повторяет операцию до тех пор, пока не достигнет максимального предела повторов.При работе с SQL Server доступен сокращенный метод, который можно использовать для включения SqlServerRetryingExecutionStrategy
SqlServerOptions — это EnableRetryOnFailure:public ApplicationDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder
var connectionString = @"server=.,5433;Database=AutoLot50;
User Id=sa;Password=P@ssw0rd;";
optionsBuilder.UseSqlServer(connectionString,
options => options.EnableRetryOnFailure);
return new ApplicationDbContext(optionsBuilder.Options);
Максимальное количество повторов и предельное время между повторами можно конфигурировать в зависимости от требований приложения. Если предел повторов достигается без завершения операции, тогда EF Core уведомит приложение о проблемах с подключением путем генерации RetryLimitExceededException
try
{
Context.SaveChanges;
}
catch (RetryLimitExceededException ex)
{
// Превышен предел повторов.
// Требуется интеллектуальная обработка.
Console.WriteLine($"Retry limit exceeded! {ex.Message}");
}
Для поставщиков баз данных, которые не предлагают встроенной стратегии выполнения, можно создавать специальную стратегию выполнения. Дополнительные сведения ищите в документации по EF Core: https://docs.microsoft.com/ru-ru/ef/core/miscellaneous/connection-resiliency
Связанные данные
Навигационные свойства сущности используются для загрузки связанных данных сущности. Связанные данные можно загружать энергичным образом (один оператор LINQ, один запрос SQL), энергичным образом с разделением запросов (один оператор LINQ, множество запросов SQL), явным образом (множество вызовов LINQ, множество запросов SQL) или ленивым образом (один оператор LINQ, множество запросов SQL по требованию).
Помимо возможности загрузки связанных данных с применением навигационных свойств исполняющая среда EF Core будет автоматически приводить в порядок сущности по мере их загрузки в ChangeTracker
Make загружаются в DbSet, после чего все записи Car загружаются в DbSet. Несмотря на то что записи загружались по отдельности, они будут доступны друг другу через навигационные свойства.Энергичная загрузка
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT