Наличие поддерживающих полей предпочтительнее в двух сценариях: при использовании шаблона INotifyPropertyChanged
Имена, типы данных и допустимость значений null
Сопоставление классов с таблицами
В EF Core доступны две схемы сопоставления классов с таблицами: "таблица на иерархию" (table-per-hierarchy — ТРН) и "таблица на тип" (table-per-type — ТРТ). Сопоставление ТРН используется по умолчанию и отображает иерархию наследования на единственную таблицу. Появившееся в версии EF Core 5 сопоставление ТРТ отображает каждый класс в иерархии на собственную таблицу.
На заметку!
Классы также можно отображать на представления и низкоуровневые запросы SQL. Они называются типами запросов и обсуждаются позже в главе.Сопоставление "таблица на иерархию" (ТРН)
Рассмотрим приведенный ниже пример, в котором класс Car
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
Обратите внимание, что базовый класс
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 (раскрываемые вскоре).
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT