Привет, я Беляев Николай, 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-скрипты для создания и обновления схемы на основе изменений в доменной модели.
Подход Database-First:
Подход Database First предполагает создание модели данных на основе существующей базы данных. Он наиболее подходит в ситуациях, когда у вас уже есть база данных, и вам нужно создать соответствующую модель данных для работы с этой базой.
Существует несколько вариантов конфигурации сущностей, которые мы будем рассматривать в рамках данной статьи: Code convention, Data annotation attributes, Fluent-API. Будем использовать подход Code First.
Code convention.
В данном подходе мы можем не задавать параметры для полей таблицы. EF Core самостоятельно определит их. Например, Primary Key – для этого необходимо создать поле с именем Id или названием класса с приставкой Id. Чтобы поле могло принимать null нам надо просто сделать nullable свойство в модели.
Рассмотрим данный подход на примере класса Person.
В этом примере мы создали класс, который описывает таблицу Persons в БД, поле Id, как было написано ранее EF Core сделает Primary Key, поле Age будет принимать null. Теперь разберемся со связями, например, сделаем связь один ко многим между сотрудником и отделами. Для создания такой связи сделаем класс Department со следующими полями
Для создания внешнего ключа на эту таблицу нам даже не надо ничего писать в класс Person, EF Core самостоятельно создаст поле DepartmentId в таблице Persons.
Data annotation attributes.
В этом подходе различные параметры поля мы можем задавать с помощью атрибутов. Рассмотрим этот подход на примере уже созданного класса Person, переименуем поле Id в Id2, в этом случае EF Core не будет автоматически создавать Primary Key, но мы укажем соответствующий атрибут, также добавим поле, которое не будет создано в базе данных.
Более подробный список атрибутов можно посмотреть - https://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx
Fluent API.
В этом подходе нам надо переопределить метод OnModelCreating, в классе который наследуется от DbContext, чтобы мы могли управлять полями классов через объект ModelBuilder. Рассмотрим этот подход на примере.
Здесь мы поменяли название для полей 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.
Ссылки на наши ресурсы – ниже: