dotnet ef database update TPH -c AutoLot.Samples.ApplicationDbContext
Первая команда устанавливает инструменты командной строки EF Core как глобальные. На вашей машине это понадобится сделать только раз. Вторая команда создает в папке
Migrations
миграцию по имени ТРН с применением класса
ApplicationDbContext
в пространстве имен
AutoLot.Samples
.
Третья команда обновляет базу на основе миграции ТРН.
Когда EF Core используется для создания этой таблицы в базе данных, то унаследованный класс
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
В предыдущем примере для создания свойств таблицы и столбцов применялись соглашения EF Core (раскрываемые вскоре).
Сопоставление "таблица на тип" (ТРТ)
Для изучения схемы сопоставления ТРТ можно использовать те же самые сущности, что и ранее, даже если базовый класс помечен как абстрактный. Поскольку схема TPH применяется по умолчанию, инфраструктуру EF Core необходимо проинструктировать для отображения каждого класса на таблицу, что можно сделать с помощью аннотаций данных или Fluent API. Добавьте в
Чтобы "сбросить" базу данных и проект, удалите папку
Migrations
и базу данных. Вот как удалить базу данных в CLI:
dotnet ef database drop -f -c AutoLot.Samples.ApplicationDbContext
Теперь создайте и примените миграцию для схемы ТРТ:
dotnet ef migrations add TPT -o Migrations -c AutoLot.Samples.ApplicationDbContext
dotnet ef database update TPT -c AutoLot.Samples.ApplicationDbContext
При обновлении базы данных исполняющая среда EF Core создаст следующие таблицы. Индексы также показывают, что таблицы имеют сопоставление "один к одному":
WITH CHECK ADD CONSTRAINT [FK_Inventory_BaseEntities_Id]
FOREIGN KEY([Id])
REFERENCES [dbo].[BaseEntities] ([Id])
GO
ALTER TABLE [dbo].[Inventory] CHECK CONSTRAINT [FK_Inventory_BaseEntities_Id]
GO
На
заметку! С сопоставлением TPT связаны значительные последствия в плане производительности, которые должны приниматься во внимание при выборе данной схемы сопоставления. Дополнительные сведения ищите в документации:
Чтобы "сбросить" базу данных и проект для подготовки к следующему набору примеров, закомментируйте код в методе
OnModelCreating
и опять удалите папку
Migrations
вместе с базой данных:
dotnet ef database drop -f -c AutoLot.Samples.ApplicationDbContext
Навигационные свойства и внешние ключи
Навигационные свойства представляют то, каким образом сущностные классы связаны между собой, и позволяют проходить от одного экземпляра сущности к другому. По определению навигационным является любое свойство, которое отображается на нескалярный тип, как определено поставщиком базы данных. На практике навигационное свойство сопоставляется с другой сущностью (навигационное свойство типа ссылки) или с коллекцией других сущностей (навигационное свойство типа коллекций). На стороне базы данных навигационные свойства транслируются в отношения внешнего ключа между таблицами. Инфраструктура EF Core напрямую поддерживает отношения вида "один к одному", "один ко многим" и (в версии EF Core 5) "многие ко многим". Сущностные классы также могут иметь обратные навигационные свойства с самими собой, представляя самоссылающиеся таблицы.