C#. Entity. Операции с данными. Практический пример

Создадим полноценное приложение, которое будет выполнять все эти операции. Итак, создадим новый проект по типу Windows Forms. Новое приложение будет работать с базой данных футболистов. В качестве подхода взаимодействия с БД выберем Code First.

Вначале добавим в проект новый класс, который описывает модель футболистов:

Тут всего четыре свойства: id, имя, позиция на поле и возраст. Также добавим в проект через NuGet пакет Entity Framework и новый класс контекста данных:

В файл конфигурации app.config после секции configSections добавим узел connectionStrings, в котором определим строку подключения DefaultConnection:

Теперь визуальная часть. По умолчанию в проекте уже есть форма Form1. Добавим на нее элемент DataGridView, который будет отображать все данные из БД, а также три кнопки на каждое действие – добавление, редактирование, удаление, чтобы в итоге форма выглядела так:

CRUD операции в Entity Framework

У элемента DataGridView установим в окне свойств для свойства AllowUserToAddRowsзначение False, а для свойства SelectionMode значение FullRowSelect, чтобы можно было выделять всю строку.

Это основная форма, но добавление и редактирование объектов у нас будет происходить на вспомогательной форме. Итак, добавим в проект новую форму, которую назовем PlayerForm. Она будет иметь следующий вид:

Здесь у нас текстовое поле для ввода имени, далее выпадающий список ComboBox, в который мы через свойство Items добавляем четыре позиции. И последнее поле – NumericUpDown для ввода чисел для указания возраста. У всех этих трех полей установим свойство Modifiers равным Protected Internal, чтобы эти поля были доступны из главной формы.

Также есть две кнопки. Для кнопки “ОК” в окне свойств для свойства DialogResultукажем значение OK, а для кнопки “Отмена” для того же свойства установим значение Cancel.

Никакого кода данная форма не будет содержать. Теперь перейдем к основной форме Form1, которая и будет содержать всю логику. Весь ее код:

Чтобы получить данные из бд, используется выражение db.Players. Однако нам надо кроме того выполнить привязку к элементу DataGridView и динамически отображать все изменения в случае добавления, редактирования или удаления. Поэтому вначале используется метод db.Players.Load(), который загружает данные в объект DbContext, а затем выполняется привязка (dataGridView1.DataSource = db.Players.Local.ToBindingList())

Добавление

При добавлении объекта использует вторая форма:

Для добавления объекта используется метод Add, определенный у класса DbSet. В этот метод передается новый объект, свойства которого формируются из полей второй формы. Метод Add устанавливает значение Added в качестве состояния нового объекта. Поэтому метод db.SaveChanges() сгенерирует выражение INSERT для вставки модели в таблицу.

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

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

В данном случае контекст данных автоматически отслеживает, что объект был изменен, и при вызове метода db.SaveChanges() будет сформировано SQL-выражение UPDATE для данного объекта, которое обновит объект в базе данных.

Удаление

С удалением проще всего: получаем по id нужный объект в бд и передаем его в метод db.Players.Remove(player). Данный метод установит статус объекта в Deleted, благодаря чему Entity Framework при выполнении метода db.SaveChanges() сгенерирует SQL-выражение DELETE.

 

This entry was posted in C#, Без рубрики. Bookmark the permalink.

Leave a Reply