Плюс+ : Entity Framework

Entity Framework Core

Когда Microsoft впервые выпустили Entity Framework Core, я не очень сильно впечатлился. Если честно, я до сих пор не сильно люблю его для работы с базой данных в больших проектах. Просто я фанат чистого SQL, который позволяет мне получить всю гибкость, которые мы хотим.

Создаем приложение

В первых примерах я буду показывать все на примере консольного приложения, чтобы не делать никаких визуальных интерфейсов, а сконцентрироваться только на коде. 

Код важнее всего

Хотя я фанат чистого SQL, возможность EF не думать о базе данных и писать только код является идеальной, когда нужно что-то быстро набросать. Я могу использовать подобные вещи для экспериментов или когда что-то нужно показать в коде. Я видел команды, где такой подход использовали в качестве основного для строительства даже достаточно большого приложения. Это возможно, если вам нравится этот подход. 

Создаем контекст базы данных

Мы описали одну таблицу, но это просто класс. Тут вообще ничего не говорит о том, что этот класс каким-то образом маппится на базу данных. Чтобы .NET мог связать наш класс с базой, нужно создать класс контекста базы и добавить в него Customer. 

Доступ к базе данных

Мы создали базу из одной таблицы и есть уже код, и чтобы завершить полный цикл, нужно посмотреть, как можно добавлять данные в базу и получать к ним доступ. 

Миграции

В разделе "Создаем контекст базы данных" мы уже создали начальную миграцию и использовали ее для создания нашей первой таблицы в базе данных. Сейчас настало время поговорить о миграциях чуть более подробно.

Сначала база данных

Если вы работаете над проектом, где уже есть база данных и ее нужно использовать с EF или если вы хотите иметь чуть больше контроля над тем, как выполняются миграции и не доверяете утилитам EF, то можно сначала сделать нужную вам структуру базы данных в удобных а потом сгенерировать код для этой структуры.  

Linq

Мы научились создавать модели и рассмотрели простой пример, в котором в базу данных добавлялись две записи Клиентов и отображаются все содержимое. Если запустить этот пример дважды, то в базе данных появятся дубликаты, а при третьем запуске появится по три копии одних и тех же записей.  

Опасные связи один ко многим

О теории связей и SQL версии этой проблемы я говорил на канале Програмысли Видеоуроки: https://www.youtube.com/watch?v=iawjAmwTo9E, а здесь мы будем говорить о проблеме только со стороны EF. 

Работа со связанными таблицами

Мы знаем, как добавлять данные в одну таблицу, а сейчас посмотрим, как это делать в связанные таблицы.

Опасные связи толпа на толпу

Я не буду здесь повторяться и рассказывать теорию связей многие ко многим, если вы не сталкивались с подобным, то рекомендую посмотреть мое видео на канале Програмысли Видеоуроки: https://www.youtube.com/watch?v=U6w7PlU97cU 

Один к одному

Я выстроил связи по мере популярности из личного опыта. Чаще всего я работаю с один ко многим. Чуть реже многие ко многим. Ну и самое редкое - один к одному. В последних компаниях, где я работал, у меня было два крупных случая связи один к одному. Были еще менее яркие, но вот крупных было два. При работе с Sony было две таблицы:  

Журналы

Если работать под Windows, то там есть очень удобная программа SQL Server Profiler, которая может подключиться к определенному серверу базы данных и начать перехватывать запросы. Под macOS я пока с такой программой не сталкивался, поэтому очень хотелось бы иметь возможность посмотреть, какие запросы выполняет EF, чтобы превратить все наши изменения в виде кода в реальные изменения в базе данных.

Как сохраняются данные?

Имея доступ к журналам, мы смогли увидеть, что EF просто использует SQL. А давайте попробуем создать новый пример, который будет просто добавлять две новые записи в базу данных:

Погружение в запросы

Очень сложно выстраивать объяснение работы с EF не прыгая по темам. Нужно объяснить, как можно добавить данные в базу, чтобы показать хотя бы простые запросы к данным и отображение. Прежде чем показать более сложные запросы, нужно поговорить о связях и как добавлять данные кучей, что уже сделано. 

Погружение в фильтрацию

Мы уже не раз использовали LINQ запросы для того, чтобы обращаться к данным. В случае с EF вы можете использовать все мощности LINQ для фильтрации данных.

Удаление данных

Мы уже достаточно хорошо рассмотрели поиск и поговорили про обновление данных и теперь пора познакомится с еще одной важной операцией – удаление. 

Отслеживание изменений

Мы уже увидели, что изменение данных происходит достаточно просто – получаем данные из базы, изменяем свойства полученных объектов и вызываем SaveChanges() контекста базы данных. Контекст отслеживает любые изменения и автоматически генерирует запросы для изменения только измененных колонок. Например: 

Погружение в связи

Мы уже неплохо окунулись в описание и создание связанных таблиц. После этого окунулись в вопрос добавления и получения данных из базы. 

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне