Читаем Язык программирования C#9 и платформа .NET5 полностью

  /// Получить первоначальные значения (когда сущность была загружена).

  PropertyValues originalProps = entry.OriginalValues;

  // Получить текущие значения (обновленные кодом выше).

  PropertyValues currentProps = entry.CurrentValues;

  // Получить текущие значения из хранилища данных.

  // Примечание: это требует еще одного обращения к базе данных

  //PropertyValues databaseProps = entry.GetDatabaseValues;

}

Устойчивость подключений

Кратковременные ошибки трудны в отладке и еще более трудны в воспроизведении. К счастью, многие поставщики баз данных имеют внутренний механизм повтора для сбоев в системе баз данных (проблемы с tempdb, ограничения пользователей и т.д.), который может быть задействован EF Core. Для SQL Server кратковременные ошибки (согласно определению команды разработчиков СУБД) перехватываются экземпляром класса 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. Несмотря на то что записи загружались по отдельности, они будут доступны друг другу через навигационные свойства.

Энергичная загрузка

Перейти на страницу:

Похожие книги

Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Нил Форд , Билл де Ора , Майкл Хайгард

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT