Описание DbContext API

181

С момента своего появления, наиболее важным классом Entity Framework являлся класс ObjectContext. Именно этот класс позволял взаимодействовать с базой данных используя сущностную модель классов. Класс контекста позволяет вам создавать и выполнять запросы, отслеживать изменения в объектах и отображать эти изменения на базу данных. Класс ObjectContext взаимодействует с другими важными классами платформы Entity Framework, например, с классом ObjectSet - его объекты можно использовать в качестве коллекций данных из таблиц, ObjectQuery – является ядром создания запроса и т.д.

После двух выпусков Entity Framework (в версиях .NET 3.5 и 4) стало понятно, что разработчики обычно используют множество функций для работы с данными и некоторые из задач, которые мы должны были делать наиболее часто, трудно было реализовать в коде. Напомню, что в этих версиях Entity Framework поддерживался только подход Database-First, при котором модель сущностных классов генерируется автоматически и вы не можете просто настраивать код в этой модели.

Чтобы решить эту проблему, разработчики Entity Framework решили сделать более простой интерфейс для работы с данными, заключив в него все возможности ObjectContext, но при этом облегчив решение различных задач для работы с данными, для которых теперь вы можете использовать стандартные шаблоны. Новый набор классов был добавлен в версии Entity Framework 4.1 (EF 4.1). Главными классами новой упрощенной платформы являются DbContext, DbSet и DbQuery, а интерфейс для работы с этими новыми классами называют DbContext API.

Фактически, после выпуска EF 4.1, платформа Entity Framework больше не была привязана к платформе .NET Framework, т.е. новые версии EF выходят отдельно от новых версий .NET Framework и доступны через менеджер пакетов NuGet. При этом следует отметить, что ядро платформы Entity Framework с выходом новых версий не изменилось (сборка System.Data.Entity.dll), при этом в каждой новой версии меняется сборка EntityFramework.dll.

Новые классы контекста, как и старые, обеспечивают взаимодействие между сущностными классами модели и базой данных. Классы модели, в свою очередь, обеспечивают доступ к свойствам, настройкам отношений между таблицами и другим особенностям модели. Благодаря новым классам контекста и подходу Code-First, вы можете изменять структуру базы данных, добавлять, обновлять и удалять данные используя только код. Ниже описано назначение основных классов DbContext API:

DbContext

Является базовым классом Entity Framework и предоставляет широкие возможности по работе с базой данных: создание запросов, отслеживание изменений и сохранение данных в базе.

DbSet

Описывает набор сущностных классов, который затем можно использовать в коде для создания запросов CRUD (create, read, update, delete) к данным. С помощью экземпляров этого класса описываются различные объекты базы данных (таблицы, представления, хранимые процедуры и т.д.)

DbQuery

Обеспечивает возможность создания запросов, при этом взаимодействовать с этим классом напрямую вам не понадобится, благодаря использованию возможностей класса DbSet.

DbModelBuilder

Этот класс является связывателем модели – он создает связь между классами модели и схемой базы данных. DbContext позволяет взаимодействовать с этим классом благодаря методу OnModelCreating(), в котором вы можете внести настройки привязки модели, перед ее построением. Напомню, такой подход к настройке модели называют Fluent API.

Database

Предоставляет доступ к базе данных, лежащей в основе классов модели Entity Framework. Вы можете использовать методы этого класса для создания или удаления базы данных, проверки ее существования или выполнения произвольной команды SQL. Вы также можете использовать статические методы этого класса, чтобы удалить базу данных или проверить ее существование, используя строку подключения. Этот класс доступен в классе контекста через одноименное свойство Database.

DbExtensions

Этот класс определяет несколько полезных статических методов, с помощью которых можно настроить запросы, например, отключить кэширование для запросов.

Ранее мы уже рассмотрели как создается модель данных в подходе Code-First и рассмотрели настройки этой модели с использованием Fluent API и аннотаций данных. При использовании подходов Database-First и Model-First беспокоиться о настройке модели сущностных классов не нужно, т.к. она генерируется автоматически. При этом мы не рассмотрели работу с данными (как можно добавлять, изменять или удалять данные в таблицах базы данных).

Если вы знакомы с общими концепциями реляционных баз данных, то должны знать, что инструкции языка для работы с данными (такого, например, как T-SQL) разделяются на два вида: DDL (Data Description Language) – язык описания данных и DML (Data Manipulation Language) – язык изменения данных. Фактически, до сих пор, мы рассмотрели как использовать инструкции DDL в Entity Framework, в последующих статьях мы рассмотрим работу с данными DML в Entity Framework.

Пройди тесты
Лучший чат для C# программистов