books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

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)

{

<b>  modelBuilder.Entity&lt;BaseEntity&gt;().ToTable(&quot;BaseEntities&quot;);</b>

<b>  modelBuilder.Entity&lt;Car&gt;().ToTable(&quot;Cars&quot;);</b>

  OnModelCreatingPartial(modelBuilder);

}

partial void OnModelCreatingPartial(ModelBuilder modelBuilder);

Чтобы "сбросить" базу данных и проект, удалите папку

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 создаст следующие таблицы. Индексы также показывают, что таблицы имеют сопоставление "один к одному":

CREATE TABLE [dbo].[BaseEntities](

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

  [TimeStamp] [varbinary](max) NULL,

 CONSTRAINT [PK_BaseEntities] 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]

GO

CREATE TABLE [dbo].[Inventory](

  [Id] [int] NOT NULL,

  [MakeId] [int] NOT NULL,

  [Color] [nvarchar](max) NULL,

  [PetName] [nvarchar](max) NULL,

 CONSTRAINT [PK_Inventory] 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]

GO

ALTER TABLE [dbo].[Inventory]

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

https://docs.microsoft.com/ru-ru/ef/core/performance/modeling-for-performance#inheritance-mapping
.

Чтобы "сбросить" базу данных и проект для подготовки к следующему набору примеров, закомментируйте код в методе

OnModelCreating()
и опять удалите папку
Migrations
вместе с базой данных:

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


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

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


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

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

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


Прокомментировать
Подтвердите что вы не робот:*