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

Внутренний метод SeedData() в классе SampleDatalnitializer добавляет данные из методов класса SampleData к экземпляру ApplicationDbContext и сохраняет данные в базе данных:

internal static void SeedData(ApplicationDbContext context)

{

  try

  {

    ProcessInsert(context, context.Customers!, SampleData.Customers);

    ProcessInsert(context, context.Makes!, SampleData.Makes);

    ProcessInsert(context, context.Cars!, SampleData.Inventory);

    ProcessInsert(context, context.Orders!, SampleData.Orders);

    ProcessInsert(context, context.CreditRisks!, SampleData.CreditRisks);

  }

  catch (Exception ex)

  {

    Console.WriteLine(ex);

    // Поместить сюда точку останова, чтобы выяснить,

    // в чем заключается проблема.

    throw;

  }

  static void ProcessInsert(

    ApplicationDbContext context,

    DbSet table,

    List records) where TEntity : BaseEntity

  {

     if (table.Any())

     {

       return;

     }

    IExecutionStrategy strategy = context.Database.CreateExecutionStrategy();

    strategy.Execute(() =>

    {

      using var transaction = context.Database.BeginTransaction();

      try

      {

        var metaData = context.Model.FindEntityType(typeof(TEntity).FullName);

        context.Database.ExecuteSqlRaw(

            $"SET IDENTITY_INSERT {metaData.GetSchema()}.

            {metaData.GetTableName()} ON");

        table.AddRange(records);

        context.SaveChanges();

        context.Database.ExecuteSqlRaw(

            $"SET IDENTITY_INSERT {metaData.GetSchema()}.

            {metaData.GetTableName()} OFF");

        transaction.Commit();

      }

      catch (Exception)

      {

        transaction.Rollback();

      }

      });

  }

}

Для обработки данных в методе SeedData() используется локальная функция. Сначала она проверяет, содержит ли таблица какие-то записи, и если нет, то переходит к обработке выборочных данных. Из фасадного экземпляра базы данных создается экземпляр реализации IExecutionStrategy, применяемый для создания явной транзакции, которая необходима для включения и отключения вставки идентичности. Записи добавляются; если все прошло успешно, тогда транзакция фиксируется, а в противном случае подвергается откату.

Приведенные далее два открытых метода используются для сброса базы данных. Метод InitializeData() удаляет и воссоздает базу данных перед ее заполнением начальными данными, а метод ClearDatabase() просто удаляет все записи, сбрасывает идентичность и заполняет базу начальными данными:

public static void InitializeData(ApplicationDbContext context)

{

  DropAndCreateDatabase(context);

  SeedData(context);

}

public static void ClearAndReseedDatabase(ApplicationDbContext context)

{

  ClearData(context);

  SeedData(context);

}

<p id="AutBody_Root1012"><strong>Настройка тестов</strong></p>

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

<p id="AutBody_Root1013"><strong>Создание проекта</strong></p>

Первым делом необходимо настроить платформу интеграционного тестирования с использованием xUnit — инфраструктуры тестирования, совместимой с .NET Core. Начните с добавления нового  по имени AutoLot.Dal.Tests, который в Visual Studio носит название xUnit Test Project (.NET Core) (Проект тестирования xUnit (.NET Core)).

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

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

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

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

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

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

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

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

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