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

      $"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;

  }

}

<p id="AutBody_Root982"><strong>Создание миграции и обновление базы данных</strong></p>

На этой стадии оба проекта компилируются и все готово к созданию еще одной миграции для обновления базы данных. Введите в каталоге проекта AutoLot.Dal следующие команды (каждая команда должна вводиться в одной строке):

dotnet ef migrations add UpdatedEntities -o EfStructures\Migrations

 -c AutoLot.Dal.EfStructures.ApplicationDbContext

dotnet ef database update UpdatedEntities

 -c AutoLot.Dal.EfStructures.ApplicationDbContext

<p id="AutBody_Root983"><strong>Добавление представления базы данных и хранимой процедуры</strong></p>

 Осталось внести в базу данных два изменения: создать хранимую процедуру GetPetName, рассмотренную в главе 21, и добавить представление базы данных, которое объединяет таблицу Orders с деталями Customer, Car и Make.

<p id="AutBody_Root984"><strong>Добавление класса MigrationHelpers</strong></p>

Хранимая процедура и представление будут создаваться с использованием миграции, которая требует написания кода вручную. Причина поступать так (вместо того, чтобы просто открыть Azure Data Studio и запустить код T-SQL) — желание поместить полное конфигурирование базы данных в один процесс. Когда все содержится в миграциях, единственный вызов dotnet ef database update гарантирует, что база данных является актуальной, включая конфигурацию EF Core и специальный код SQL.

Выполнение команды the dotnet ef migrations add при отсутствии изменений в модели все равно приводит к созданию файлов миграции, имеющих правильную отметку времени, с пустыми методами Up() и Down(). Введите показанную ниже команду для создания пустой миграции (но не применения миграции):

dotnet ef migrations add SQL -o EfStructures\Migrations

 -c AutoLot.Dal.EfStructures.ApplicationDbContext

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных