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 ... 266 267 268 269 270 271 272 273 274 ... 407
    Перейти на страницу:
    Сущности и их свойства отображаются на таблицы и столбцы с применением соглашений EntityFramework Core, конфигурации и Fluent API (кода). Сущности не обязаны быть сопоставленными напрямую со схемой базы данных. Вы можете структурировать сущностные классы согласно потребностям создаваемого приложения и затем отобразить свои уникальные сущности на схему базы данных.

    Подобная слабая связанность между базой данных и вашими сущностями означает возможность придания сущностям формы, соответствующей предметной области, независимо от проектного решения и структуры базы данных. Например, возьмем простую таблицу Inventory из базы данных AutoLot и сущностный класс Car из предыдущей главы. Имена отличаются, но сущность Car сопоставляется с таблицей Inventory. Исполняющая среда EF Core исследует конфигурацию сущностей в модели, чтобы отобразить клиентское представление таблицы Inventory (класс Car в примере) на корректные столбцы таблицы Inventory.

    В последующих разделах будет показано, каким образом соглашения EF Core, аннотации данных и код (использующий Fluent API) сопоставляют сущности, свойства и отношения между сущностями в модели с таблицами, столбцами и отношениями внешних ключей в базе данных.

    Сопоставление свойств со столбцами

    При работе с реляционным хранилищем данных по соглашениям EF Core все открытые свойства, допускающие чтение и запись, сопоставляются со столбцами таблицы, на которую отображается сущность. Если свойство является автоматическим, то EF Core читает и записывает через методы получения и установки. Если свойство имеет поддерживающее поле, тогда EF Core будет читать и записывать не в открытое свойство, а в поддерживающее поле, хотя оно и закрыто. Несмотря на то что EF Core может читать и записывать в закрытые поля, все же должно быть предусмотрено открытое свойство, предназначенное для чтения и записи, которое инкапсулирует поддерживающее поле.

    Наличие поддерживающих полей предпочтительнее в двух сценариях: при использовании шаблона INotifyPropertyChanged в приложениях Windows Presentation Foundation (WPF) и при возникновении конфликта между стандартными значениями базы данных и стандартными значениями .NET Core. Применение EF Core с WPF обсуждается в главе 28, а стандартные значения базы данных раскрываются позже в текущей главе.

    Имена, типы данных и допустимость значений null столбцов конфигурируются через соглашения, аннотации данных и/или Fluent API. Все указанные темы подробно рассматриваются далее в главе.

    Сопоставление классов с таблицами

    В EF Core доступны две схемы сопоставления классов с таблицами: "таблица на иерархию" (table-per-hierarchy — ТРН) и "таблица на тип" (table-per-type — ТРТ). Сопоставление ТРН используется по умолчанию и отображает иерархию наследования на единственную таблицу. Появившееся в версии EF Core 5 сопоставление ТРТ отображает каждый класс в иерархии на собственную таблицу.

    На заметку! Классы также можно отображать на представления и низкоуровневые запросы SQL. Они называются типами запросов и обсуждаются позже в главе.

    Сопоставление "таблица на иерархию" (ТРН)

    Рассмотрим приведенный ниже пример, в котором класс Car из главы 21 разделен на два класса: базовый класс для свойств Id и TimeStamp и собственно класс Car с остальными свойствами. Оба класса должны быть созданы в папке Models проекта AutoLot.Samples:

    using System.Collections.Generic;

    namespace AutoLot.Samples.Models

    {

      public abstract class BaseEntity

      {

        public int Id { get; set; }

        public byte[] TimeStamp { get; set; }

      }

    }

    using System.Collections.Generic;

    namespace AutoLot.Samples.Models

    {

      public class Car : BaseEntity

      {

        public string Color { get; set; }

        public string PetName { get; set; }

        public int MakeId { get; set; }

      }

    }

    Чтобы уведомить EF Core о том, что сущностный класс является частью объектной модели, предусмотрите свойство DbSet<T> для сущности. Добавьте в класс ApplicationDbContext такой оператор using:

    using AutoLot.Samples.Models;

    Поместите следующий код в класс ApplicationDbContext между конструктором и методом OnModelCreating():

    public DbSet<Car> Cars { get; set; }

    Обратите внимание, что базовый класс не добавляется в виде экземпляра DbSet<T>. Хотя подробные сведения о миграциях приводятся позже в главе, давайте создадим базу данных и таблицу Cars. Откройте окно командной строки в папке проекта AutoLot.Samples и выполните показанные ниже команды:

    dotnet tool install --global dotnet-ef --version 5.0.1

    dotnet ef migrations add TPH -o Migrations

      -c AutoLot.Samples.ApplicationDbContext

    dotnet ef database update TPH  -c AutoLot.Samples.ApplicationDbContext

    Первая команда устанавливает инструменты командной строки EF Core как глобальные. На вашей машине это понадобится сделать только раз. Вторая команда создает в папке Migrations миграцию по имени ТРН с применением класса ApplicationDbContext в пространстве имен AutoLot.Samples. Третья команда обновляет базу на основе миграции ТРН.

    Когда EF Core используется для создания этой таблицы в базе данных, то унаследованный класс BaseEntity объединяется с классом Car и создается единственная таблица:

    CREATE TABLE [dbo].[Cars](

      [Id] [int] IDENTITY(1,1) NOT NULL,

      [MakeId] [int] NOT NULL,

      [Color] [nvarchar](max) NULL,

      [PetName] [nvarchar](max) NULL,

      [TimeStamp] [varbinary](max) NULL,

     CONSTRAINT [PK_Cars] PRIMARY KEY CLUSTERED

    (

      [Id] ASC

    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,

     IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,

     ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    В предыдущем примере для создания свойств таблицы и столбцов применялись соглашения EF Core (раскрываемые вскоре).

    Сопоставление "таблица на тип" (ТРТ)

    Для изучения схемы сопоставления ТРТ можно использовать те же самые сущности, что и ранее, даже если базовый класс помечен как абстрактный. Поскольку схема TPH применяется по умолчанию, инфраструктуру EF Core необходимо проинструктировать для отображения каждого класса на таблицу, что можно сделать с помощью аннотаций данных или Fluent API. Добавьте в ApplicationDbContext следующий код:

    protected override void OnModelCreating(ModelBuilder modelBuilder)

    {

      modelBuilder.Entity<BaseEntity>().ToTable("BaseEntities");

      modelBuilder.Entity<Car>().ToTable("Cars");

      OnModelCreatingPartial(modelBuilder);

    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);

    Чтобы "сбросить" базу данных и проект, удалите папку Migrations и базу данных. Вот как удалить базу данных в CLI:

    dotnet ef database drop -f -c AutoLot.Samples.ApplicationDbContext

    Теперь создайте и примените миграцию для схемы ТРТ:

    dotnet ef

    1 ... 266 267 268 269 270 271 272 273 274 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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