Entity Framework: как быстрее написать код для работы с базой данных
Код взаимодействия с базой данных может быть очень громоздким, однако его можно сократить, воспользовавшись Entity Framework.
vlada_maestro / shutterstock
Entity Framework — это решение для работы с базами данных, которое используется в программировании на языках семейства .NET. Оно позволяет взаимодействовать с СУБД с помощью сущностей (entity), а не таблиц. Также код с использованием EF пишется гораздо быстрее.
Например, работая с базами данных напрямую, разработчик должен беспокоиться о подключении, подготовке SQL и параметров, отправке запросов и транзакций. На Entity Framework всё это делается автоматически — программист же работает непосредственно с сущностями и только говорит EF, что нужно сохранить изменения.
В этой статье будут разобраны основы применения Entity Framework, для понимания которых нужно владеть ADO.NET — пользоваться базами данных, писать SQL-запросы и работать с подключениями.
Как установить Entity Framework
Подключить Entity Framework можно к любому проекту — от Xamarin до ASP.NET. Однако, чтобы не отвлекаться на работу с интерфейсом, здесь мы рассмотрим консольное приложение.
Для начала создайте проект Console Application в Visual Studio. Затем откройте менеджер пакетов NuGet:
И скачайте пакет с этим фреймворком:
Когда он установится, нужно подключиться к СУБД. Это делается с помощью файла конфигурации. Так как рассматривается консольное приложение, то надо открыть файл App.config:
В него вносится информация о СУБД. Для этого после элемента <configSections> добавляем следующее:
Отсюда фреймворк будет брать connectionString. В этом примере приложение будет подключаться к SQLEXPRESS, но можно использовать и localdb. При этом достаточно указать любое название самой базы данных: если её не существует, EF создаст её сам. То же самое касается и всех таблиц.
Закончив с файлом конфигурации, можно приступать к работе с кодом.
Как использовать Entity Framework
В этой статье будет рассмотрен подход Code first, в котором сначала пишется код, а потом на его основе работает база данных.
В первую очередь необходимо создать сущность. Так как C# является объектно-ориентированным языком программирования, то сущность должна представлять собой класс.
Далее можно добавить класс, который будет использоваться для подключения к базе данных, — он называется контекстом:
Несмотря на то что класс называется PlayerContext, его можно использовать для работы с любыми другими сущностями. Для этого нужно только добавить ещё несколько коллекций DbSet.
Название таблицы должно представлять собой множественное число от названия сущности: Player — Players, Person — People.
Теперь всё готово и можно приступить к работе с базой данных. Начать стоит с объявления первых объектов и их добавления в БД.
Запустив программу с таким кодом, можно увидеть, что всё успешно сохранилось:
Теперь пора проверить, есть ли что-нибудь в базе данных в таблице Players. Для этого можно просто вывести данные из объектов в свойстве Players.
Вот что должно получиться:
Тут видно, что Entity Framework автоматически указал свойство Id как первичный ключ, поэтому значения заполняются автоматически.
Чтобы выполнять более сложные операции, такие как выборка, редактирование или удаление, можно воспользоваться SQL-запросами. Однако гораздо проще будет заменить их на Linq — language integrated query (запросы, интегрированные в язык).
Как использовать Linq to Entities
Linq добавляет в язык программирования синтаксис, напоминающий используемый в SQL. Например, для выборки можно использовать метод Where (), который позволяет получить все строки из таблицы, если они соответствуют утверждению.
В отличие от ADO.NET, тут будет получена не строка из таблицы, а сразу объекты, которые можно будет тут же использовать без предварительной подготовки.
Вот как выглядит редактирование строк в Entity Framework:
Вот что будет выведено в результате работы такого кода:
Никнейм игрока был успешно изменён. Теперь можно попробовать удалить эту сущность из базы данных.
Тут уже можно увидеть, что проверяется, не равен ли объект null, потому что иначе будет вызвано исключение NullReferenceException.
Вот каким будет вывод:
Заключение
Entity Framework позволяет значительно сократить код работы с базами данных. При этом он предоставляет большие возможности. Например, можно использовать:
- foreign keys;
- связи one-to-one, one-to-many и many-to-many;
- параметризацию запросов;
- хранимые процедуры.
Однако стоит учитывать, что EF выступает прослойкой между приложением и базой данных, поэтому может ухудшаться производительность. Для небольших проектов это допустимо, но если программа должна работать под большой нагрузкой, то лучше использовать чистый ADO.NET.