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

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

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 ... 412 413 414 415 416 417 418 419 420 ... 642
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

 OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

<b>ALTER TABLE [dbo].[CarDriver]</b>

<b>WITH CHECK ADD  CONSTRAINT [FK_CarDriver_Cars_CarsId] FOREIGN </b>

<b>KEY([CarsId])</b>

<b>REFERENCES [dbo].[Cars] ([Id])</b>

<b>ON DELETE CASCADE</b>

GO

<b>ALTER TABLE [dbo].[CarDriver] CHECK CONSTRAINT [FK_CarDriver_Cars_CarsId]</b>

GO

<b>ALTER TABLE [dbo].[CarDriver]</b>

<b>WITH CHECK ADD  CONSTRAINT [FK_CarDriver_Drivers_DriversId]</b>

<b>FOREIGN KEY([DriversId])</b>

<b>REFERENCES [dbo].[Drivers] ([Id])</b>

<b>ON DELETE CASCADE</b>

GO

<b>ALTER TABLE [dbo].[CarDriver] CHECK CONSTRAINT [FK_CarDriver_Drivers_DriversId]</b>

GO

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

На заметку! На момент написания главы создание шаблонов для отношений "многие ко многим" пока не поддерживалось. Создание шаблонов для отношений "многие ко многим" основано на табличной структуре, как во втором примере с сущностью CarDriver. Дополнительные сведения о проблеме доступны по ссылке https://github.com/dotnet/efcore/issues/22475.

Каскадное поведение

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

• зависимые записи удаляются:

• зависимые внешние ключи устанавливаются в null;

• зависимые сущности остаются незатронутыми.

Стандартное поведение для необязательных и обязательных отношений отличается. Поведение можно установить в одно из семи значений, из которых рекомендуется использовать только пять. Поведение конфигурируется с применением перечисления DeleteBehavior посредством Fluent API. Ниже перечислены доступные варианты в перечислении:

• Cascade;

• ClientCascade;

• ClientNoAction (не рекомендуется к использованию);

• ClientSetNull;

• NoAction (не рекомендуется к использованию);

• SetNull;

• Restrict.

Указанное поведение в EF Core инициируется только после удаления сущности и вызова метода SaveChanges() на экземпляре класса, унаследованного от DbContext. Дополнительные сведения о том, когда EF Core взаимодействует с хранилищем данных, ищите в разделе "Выполнение запросов" далее в главе.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Необязательные отношения

Вспомните из табл. 22.4, что необязательными отношениями считаются такие, в которых зависимая сущность может устанавливать значение или значения внешних ключей в null. Для необязательных отношений стандартным поведением является ClientSetNull. В табл. 22.5 описано каскадное поведение с зависимыми сущностями и влияние на записи базы данных при использовании SQL Server.

Обязательные отношения

Обязательные отношения — это такие отношения, при которых зависимая сущность не может устанавливать значение или значения внешних ключей в null. Для обязательных отношений стандартным поведением является Cascade. В табл. 22.6 описано каскадное поведение с зависимыми сущностями и влияние на записи базы данных при использовании SQL Server.

Соглашения, связанные с сущностями

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

Во всех предшествующих примерах навигационных свойств для построения отношений между таблицами были задействованы соглашения EF Core.

Отображение свойств на столбцы

По соглашению открытые свойства для чтения и записи отображаются на столбцы с теми же самыми именами. Типы данных столбцов соответствуют эквивалентам для типов данных CLR свойств, принятым в хранилище данных. Свойства, не допускающие null, устанавливаются в хранилище данных как не null, а свойства, допускающие null, устанавливаются так, чтобы значение null было разрешено. Инфраструктура EF Core поддерживает ссылочные типы, допускающие null, которые появились в C# 8. Для поддерживающих полей EF Core ожидает их именования с применением одного из следующих соглашений (в порядке старшинства):

• _&lt;имя свойства в &quot;верблюжьем&quot; стиле&gt;

• _&lt;имя свойства&gt;

• m_&lt;имя свойства в &quot;верблюжьем&quot; стиле&gt;

• m_&lt;имя свойства&gt;

В случае обновления свойства Color класса Car для использования поддерживающего поля (по соглашению) оно получило бы имя _color, _Color, m_color или m_Color, как показано ниже:

1 ... 412 413 414 415 416 417 418 419 420 ... 642
Перейти на страницу:
Отывы о книге
Открыть боковую панель
Комментарии
Ксения
Ксения 25.01.2025 - 12:30
Неплохая подборка книг. Прочитаю все однозначно.
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее