Преимущество инфраструктуры EF Core, применяющей шаблон поставщиков баз данных ADO.NET, заключается в том, что она позволяет объединять в одном проекте парадигмы доступа к данным EF Core и ADO.NET, расширяя ваши возможности. Например, в случае использования EF Core с целью предоставления подключения, схемы и имени таблицы для операций массового копирования задействуются возможности сопоставления EF Core и функциональность программы массового копирования, встроенная в ADO.NET. Такой смешанный подход делает EF Core просто еще одним инструментом в вашем арсенале.
Когда вы оцените объем связующего кода для базового доступа к данным, поддерживаемый инфраструктурой EF Core в согласованной и эффективной манере, по всей видимости, она станет вашим основным механизмом при доступе к данным.
На заметку! Многие сторонние СУБД (скажем, Oracle и MySQL) предлагают поставщики данных, осведомленные об инфраструктуре EF Core. Если вы имеете дело не с SQL Server, тогда обратитесь за детальными сведениями к разработчику СУБД или ознакомьтесь с перечнем доступных поставщиков данных EF Core по ссылке https://docs.microsoft.com/ru-ru/ef/core/providers/.
Инфраструктура EF Core лучше всего вписывается в процесс разработки в случае применения подходов в стиле "формы поверх данных" (или "API-интерфейс поверх данных"). Оптимальными для EF Core являются операции над небольшим количеством сущностей, использующие шаблон единицы работы с целью обеспечения согласованности. Она не очень хорошо подходит для выполнения крупномасштабных операций над данными вроде тех, что встречаются приложениях хранилищ данных типа "извлечение, трансформация, загрузка" (extract-transform-load — ETL) или в больших системах построения отчетов.
Строительные блоки Entity Framework Core
К главным компонентам EF Core относятся DbContext, ChangeTracker, специализированный тип коллекции DbSet, поставщики баз данных и сущности приложения. Для проработки примеров в текущем разделе создайте новый проект консольного приложения по имени AutoLot.Samples и добавьте к нему пакеты Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.Design и Microsoft.EntityFrameworkCore.SqlServer:
dotnet new sln -n Chapter22_AllProjects
dotnet new console -lang c# -n AutoLot.Samples -o .\AutoLot.Samples -f net5.0
dotnet sln .\Chapter22_AllProjects.sln add .\AutoLot.Samples
dotnet add AutoLot.Samples package Microsoft.EntityFrameworkCore
dotnet add AutoLot.Samples package Microsoft.EntityFrameworkCore.Design
dotnet add AutoLot.Samples package Microsoft.EntityFrameworkCore.SqlServer
Класс DbContext
Класс DbContext входит в состав главных компонентов EF Core и предоставляет доступ к базе данных через свойство Database. Объект DbContext управляет экземпляром ChangeTracker, поддерживает виртуальный метод OnModelCreating() для доступа к текучему API-интерфейсу (Fluent API), хранит все свойства DbSet и предлагает метод SaveChanges(), позволяющий сохранять данные в хранилище. Он применяется не напрямую, а через специальный класс, унаследованный от DbContext. Именно в этом классе размещены все свойства типа DbSet. В табл. 22.1 описаны некоторые часто используемые члены класса DbContext.
Создание класса, производного от DbContext
Первый шаг в EF Core заключается в создании специального класса, унаследованного от DbContext. Затем добавляется конструктор, который принимает строго типизированный экземпляр DbContextOptions (рассматривается далее) и передает его конструктору базового класса:
namespace AutoLot.Samples
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions
: base(options)
{
}
}
}
Именно производный от DbContext класс применяется для доступа к базе данных и работает с сущностями, средством отслеживания изменений и всеми компонентами EF Core.
Конфигурирование экземпляра DbContext