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

        "There is a problem with SQl Server.", ex);

      // Возникла проблема c SQL Server

  }

  catch (DbUpdateException ex)

  {

    // Подлежит регистрации в журнале и надлежащей обработке.

    throw new CustomDbUpdateException(

        "An error occurred updating the database", ex);

      // Произошла ошибка при обновлении базы данных

  }

  catch (Exception ex)

  {

    // Подлежит регистрации в журнале и надлежащей обработке.

    throw new CustomException(

        "An error occurred updating the database", ex);

      // Произошла ошибка при обновлении базы данных

  }

}

Обработка событий DbContext и ChangeTracker

Перейдите к конструктору класса ApplicationDbContext и добавьте три события DbContext, которые обсуждались в предыдущей главе:


public ApplicationDbContext(DbContextOptions options)

  : base(options)

{

  base.SavingChanges += (sender, args) =>

  {

     Console.WriteLine($"Saving changes for {((ApplicationDbContext)

       sender)!.Database!.GetConnectionString}");

  };

  base.SavedChanges += (sender, args) =>

  {

     Console.WriteLine($"Saved {args!.EntitiesSavedCount} changes for

       {((ApplicationDbContext)sender)!.Database!.GetConnectionString}");

  };

  base.SaveChangesFailed += (sender, args) =>

  {

    Console.WriteLine(

      $"An exception occurred! {args.Exception.Message} entities");

  };

}


Затем добавьте обработчики для событий StateChanged и Tracked класса ChangeTracker:


public ApplicationDbContext(DbContextOptions options)

  : base(options)

{

  ...

  ChangeTracker.Tracked += ChangeTracker_Tracked;

  ChangeTracker.StateChanged += ChangeTracker_StateChanged;

}


Аргументы события Tracked содержат ссылку на сущность, которая инициировала событие, и указывают, было оно получено из запроса (загруженного из базы данных) или добавлено программно. Добавьте в класс ApplicationDbContext следующий обработчик событий:


private void ChangeTracker_Tracked(object? sender, EntityTrackedEventArgs e)

{

  var source = (e.FromQuery) ? "Database" : "Code";

  if (e.Entry.Entity is Car c)

  {

    Console.WriteLine($"Car entry {c.PetName} was added from {source}");

  }

}


Событие StateChanged инициируется при изменении состояния сущности. Одно из применений этого события — аудит. Поместите в класс ApplicationDbContext приведенный ниже обработчик событий. Если свойство NewState сущности имеет значение Unchanged, тогда выполняется проверка свойства OldState для выяснения, сущность была добавлена или же модифицирована.


private void ChangeTracker_StateChanged(object? sender,

                                        EntityStateChangedEventArgs e)

{

  if (e.Entry.Entity is not Car c)

  {

    return;

  }

  var action = string.Empty;

   Console.WriteLine($"Car {c.PetName}

           was {e.OldState} before the state changed to {e.NewState}");

  switch (e.NewState)

  {

    case EntityState.Unchanged:

      action = e.OldState switch

      {

        EntityState.Added => "Added",

        EntityState.Modified => "Edited",

        _ => action

      };

      Console.WriteLine($"The object was {action}");

      break;

  }

}

Создание миграции и обновление базы данных

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

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

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

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

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

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

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

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

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