Найти тему
Работяги

Конфигурирование сущностей с помощью Entity Framework Core

Привет, я Беляев Николай, Backend C# разработчик, представляю IT сообщество Работяги. В этом сообществе ты можешь поделиться своими проблемами в разработке и найти ответы на интересующие тебя вопросы из сферы IT. Ссылки на наши другие ресурсы вы можете найти в профиле нашего канала или в конце этой статьи.

В этой статье мы познакомимся с Entity Framework Core, разберемся какие существуют подходы для работы с базами данных, также рассмотрим варианты конфигурации сущностей, рассмотрим как создать связь один ко многим с помощью Code convention. В данной статье я не буду рассказывать как подключиться к базе данных и создать контекст для работы с ней.

Entity Framework Core (EF Core) – это технология для доступа к базам данных от Microsoft. EF Core позволяет взаимодействовать с СУБД с помощью сущностей, то есть классов и объектов NET, а не таблиц базы данных. Это самый известный и функциональный ORM – инструмент в C#. ORM — это object-relational mapping — отображение данных на реальные объекты.

Подходы для работы с базами данных:

Подход Code-First:

Подход Code-First в Entity Framework Core позволяет сначала создать классы, которые описывают таблицы в базе данных, а затем сгенерировать схему базы данных на основе созданных классов.

При подходе Code-First мы получаем полный контроль над схемой базы данных и можем легко управлять изменениями в модели с помощью миграций. EF Core генерирует SQL-скрипты для создания и обновления схемы на основе изменений в доменной модели.

-2

Подход Database-First:

Подход Database First предполагает создание модели данных на основе существующей базы данных. Он наиболее подходит в ситуациях, когда у вас уже есть база данных, и вам нужно создать соответствующую модель данных для работы с этой базой.

-3

Существует несколько вариантов конфигурации сущностей, которые мы будем рассматривать в рамках данной статьи: Code convention, Data annotation attributes, Fluent-API. Будем использовать подход Code First.

Code convention.

В данном подходе мы можем не задавать параметры для полей таблицы. EF Core самостоятельно определит их. Например, Primary Key – для этого необходимо создать поле с именем Id или названием класса с приставкой Id. Чтобы поле могло принимать null нам надо просто сделать nullable свойство в модели.

Рассмотрим данный подход на примере класса Person.

-4

В этом примере мы создали класс, который описывает таблицу Persons в БД, поле Id, как было написано ранее EF Core сделает Primary Key, поле Age будет принимать null. Теперь разберемся со связями, например, сделаем связь один ко многим между сотрудником и отделами. Для создания такой связи сделаем класс Department со следующими полями

-5

Для создания внешнего ключа на эту таблицу нам даже не надо ничего писать в класс Person, EF Core самостоятельно создаст поле DepartmentId в таблице Persons.

Data annotation attributes.

В этом подходе различные параметры поля мы можем задавать с помощью атрибутов. Рассмотрим этот подход на примере уже созданного класса Person, переименуем поле Id в Id2, в этом случае EF Core не будет автоматически создавать Primary Key, но мы укажем соответствующий атрибут, также добавим поле, которое не будет создано в базе данных.

-6

Более подробный список атрибутов можно посмотреть - https://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx

Fluent API.

В этом подходе нам надо переопределить метод OnModelCreating, в классе который наследуется от DbContext, чтобы мы могли управлять полями классов через объект ModelBuilder. Рассмотрим этот подход на примере.

-7

Здесь мы поменяли название для полей Id2 и Surname, сделали поле Id2 – Primary Key. Более подробный список методов для конфигурации таблиц можно посмотреть тут - Fluent API in Entity Framework Core (entityframeworktutorial.net)

EF Core предоставляет разнообразные подходы к работе с базами данных, которые могут быть выбраны в зависимости от потребностей проекта и предпочтений разработчика. Мы рассмотрели различные варианты конфигурации сущностей: Code convention, Data annotation attributes и Fluent API. Code convention позволяет определить параметры полей таблицы автоматически, Data annotation attributes позволяют управлять параметрами полей с помощью атрибутов, а Fluent API предоставляет более гибкий способ управления полями классов через объект ModelBuilder.

Ссылки на наши ресурсы – ниже:

https://discord.gg/dWMKzXyG

https://t.me/podcust_rabot9g

https://www.youtube.com/@Rabot9gi

https://vk.com/club224443714