Преимущество инфраструктуры 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) или в больших системах построения отчетов.

<p id="AutBody_Root879"><strong>Строительные блоки Entity Framework Core</strong></p>

К главным компонентам 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

<p id="AutBody_Root880"><strong>Класс DbContext</strong></p>

Класс DbContext входит в состав главных компонентов EF Core и предоставляет доступ к базе данных через свойство Database. Объект DbContext управляет экземпляром ChangeTracker, поддерживает виртуальный метод OnModelCreating() для доступа к текучему API-интерфейсу (Fluent API), хранит все свойства DbSet и предлагает метод SaveChanges(), позволяющий сохранять данные в хранилище. Он применяется не напрямую, а через специальный класс, унаследованный от DbContext. Именно в этом классе размещены все свойства типа DbSet. В табл. 22.1 описаны некоторые часто используемые члены класса DbContext.

<p id="AutBody_Root881"><strong>Создание класса, производного от DbContext</strong></p>

Первый шаг в EF Core заключается в создании специального класса, унаследованного от DbContext. Затем добавляется конструктор, который принимает строго типизированный экземпляр DbContextOptions (рассматривается далее) и передает его конструктору базового класса:

namespace AutoLot.Samples

{

  public class ApplicationDbContext : DbContext

  {

    public ApplicationDbContext(DbContextOptions options)

            : base(options)

    {

    }

  }

}

Именно производный от DbContext класс применяется для доступа к базе данных и работает с сущностями, средством отслеживания изменений и всеми компонентами EF Core.

<p id="AutBody_Root882"><strong>Конфигурирование экземпляра DbContext</strong></p>
Перейти на страницу:

Похожие книги