LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 291 292 293 294 295 296 297 298 299 ... 407
    Перейти на страницу:
    class="code">};

    public static List<Make> Makes => new()

    {

      new() {Id = 1, Name = "VW"},

      new() {Id = 2, Name = "Ford"},

      new() {Id = 3, Name = "Saab"},

      new() {Id = 4, Name = "Yugo"},

      new() {Id = 5, Name = "BMW"},

      new() {Id = 6, Name = "Pinto"},

    };

    public static List<Car> Inventory => new()

    {

      new() {Id = 1, MakeId = 1, Color = "Black", PetName = "Zippy"},

      new() {Id = 2, MakeId = 2, Color = "Rust", PetName = "Rusty"},

      new() {Id = 3, MakeId = 3, Color = "Black", PetName = "Mel"},

      new() {Id = 4, MakeId = 4, Color = "Yellow", PetName = "Clunker"},

      new() {Id = 5, MakeId = 5, Color = "Black", PetName = "Bimmer"},

      new() {Id = 6, MakeId = 5, Color = "Green", PetName = "Hank"},

      new() {Id = 7, MakeId = 5, Color = "Pink", PetName = "Pinky"},

      new() {Id = 8, MakeId = 6, Color = "Black", PetName = "Pete"},

      new() {Id = 9, MakeId = 4, Color = "Brown", PetName = "Brownie"},

      new() {Id = 10, MakeId = 1, Color = "Rust", PetName = "Lemon",

                                                  IsDrivable = false},

    };

    public static List<Order> Orders => new()

    {

      new() {Id = 1, CustomerId = 1, CarId = 5},

      new() {Id = 2, CustomerId = 2, CarId = 1},

      new() {Id = 3, CustomerId = 3, CarId = 4},

      new() {Id = 4, CustomerId = 4, CarId = 7},

      new() {Id = 5, CustomerId = 5, CarId = 10},

    };

    public static List<CreditRisk> CreditRisks => new()

    {

      new()

      {

        Id = 1,

        CustomerId = Customers[4].Id,

        PersonalInformation = new()

        {

          FirstName = Customers[4].PersonalInformation.FirstName,

          LastName = Customers[4].PersonalInformation.LastName

        }

      }

    };

    Загрузка выборочных данных

    Внутренний метод 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<TEntity>(

        ApplicationDbContext context,

        DbSet<TEntity> table,

        List<TEntity> 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);

    }

    Настройка тестов

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

    Создание проекта

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

    На заметку! Модульные тесты предназначены для тестирования одной единицы кода. Формально повсюду в главе создаются интеграционные тесты, т.к. производится тестирование кода C# и EF Core на всем пути к базе данных и обратно.

    Введите следующую команду в окне командной строки:

    dotnet new xunit -lang c# -n AutoLot.Dal.Tests -o .AutoLot.Dal.Tests -f net5.0

    dotnet sln .Chapter23_AllProjects.sln add AutoLot.Dal.Tests

    Добавьте в проект AutoLot.Dal.Tests перечисленные ниже пакеты NuGet:

    Microsoft.EntityFrameworkCore

    Microsoft.EntityFrameworkCore.SqlServer

    Microsoft.Extensions.Configuration.Json

    Поскольку версия пакета Microsoft.NET.Test.Sdk, поставляемая с шаблоном проектов xUnit, обычно отстает от текущей доступной версии, воспользуйтесь диспетчером пакетов NuGet для обновления всех пакетов NuGet. Затем добавьте ссылки на проекты AutoLot.Models и AutoLot.Dal.

    В случае работы с CLI выполните приведенные далее команды(обратите внимание, что команды удаляют и повторно добавляют пакет Microsoft.NET.Test.Sdk, чтобы гарантировать ссылку на самую последнюю версию):

    dotnet

    1 ... 291 292 293 294 295 296 297 298 299 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки