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

Наличие поддерживающих полей предпочтительнее в двух сценариях: при использовании шаблона 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 для сущности. Добавьте в класс ApplicationDbContext такой оператор using:


using AutoLot.Samples.Models;


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


public DbSet Cars { get; set; }


Обратите внимание, что базовый класс не добавляется в виде экземпляра DbSet. Хотя подробные сведения о миграциях приводятся позже в главе, давайте создадим базу данных и таблицу 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 (раскрываемые вскоре).

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

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

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

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

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

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

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

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

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