С#. Entity. Связь многие ко многим

Связь один-ко-многим реализуется, если одна модель хранит ссылку на один объект другой модели, а вторая модель может ссылаться на коллекцию объектов первой модели. Например, в одной команде играет несколько игроков:

Добавление и вывод:

Результат вывода:

One-to-Many relationship in Entity Framework

Редактирование:

При удалении объектов, связанных отношением “один-ко-многим” нам надо учитывать то, что по умолчанию даже если внешний ключ допускает значение null (как в данном случае свойство TeamId в классе Player), мы не сможем просто так удалить одну модель, если она имеет ссылки на другую модель. Например, удаление команды в данном случае выльется в ошибку, если какой-то объект Player имеет ссылку на эту команду. Что делать в этом случае? В этом случае нам надо установить для внешнего ключа TeamId в таблице игроков ограничение ON DELETE SET NULL. Данное ограничение позволит при удалении связанного объекта устанавливать для внешнего ключа значение null.

Установку ограничения можно сделать вручную, изменим схему базы данных, либо программно. Рассмотрим, как это сделать программно. Для этого перед удалением нам надо выполнить соответствующую команду SQL, чтобы добавить ограничение:

Здесь добавляется ограничение “Players_Teams” в таблицу игроков, которая называется, как правило, dbo.Players или просто Players. Это ограничение указывает, что для внешнего ключа TeamId из таблицы Players, который связан со столбцом Id из таблицы dbo.Teams, устанавливается правило “ON DELETE SET NULL”, то есть установка null по удалению.

И после этого мы можем выполнить удаление:

При удалении команды свойство Team у объектов Player получает значение null.

This entry was posted in C#. Bookmark the permalink.

Leave a Reply