Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

Преимущество инфраструктуры 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<T>
и предлагает метод
SaveChanges
, позволяющий сохранять данные в хранилище. Он применяется не напрямую, а через специальный класс, унаследованный от
DbContext
. Именно в этом классе размещены все свойства типа
DbSet<T>
. В табл. 22.1 описаны некоторые часто используемые члены класса
DbContext
.

Создание

класса, производного от DbContext

Первый шаг в EF Core заключается в создании специального класса, унаследованного от

DbContext
. Затем добавляется конструктор, который принимает строго типизированный экземпляр
DbContextOptions
(рассматривается далее) и передает его конструктору базового класса:

namespace AutoLot.Samples

{

public class ApplicationDbContext : DbContext

{

public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)

: base(options)

{

}

}

}

Именно производный от

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

Конфигурирование экземпляра DbContext

Экземпляр

DbContext
конфигурируется с использованием экземпляра класса
DbContextOptions
. Экземпляр
DbContextOptions
создается с применением
DbContextOptionsBuilder
, т.к. класс
DbContextOptions
не рассчитан на создание экземпляров непосредственно в коде. Через экземпляр
DbContextOptionsBuilder
выбирается поставщик базы данных (наряду с любыми настройками, касающимися поставщика) и устанавливаются общие параметры экземпляра
DbContext
инфраструктуры EF Core (наподобие ведения журнала). Затем свойство
Options
внедряется в базовый класс
DbContext
во время выполнения.

Такая возможность динамического конфигурирования позволяет изменять настройки во время выполнения, просто выбирая разные параметры (скажем, поставщик MySQL вместо SQL Server) и создавая новый экземпляр производного класса

DbContext
.

Фабрика DbContext этапа проектирования

Фабрика

DbContext
этапа проектирования представляет собой класс, который реализует интерфейс
IDesignTimeDbContextFactory<T>
, где
Т
— класс, производный от
DbContext
. Интерфейс
IDesignTimeDbContextFactory<T>
имеет один метод
CreateDbContext
, который должен быть реализован для создания экземпляра производного класса
DbContext
.

В показанном ниже классе

ApplicationDbContextFactory
с помощью метода
CreateDbContext
создается строго типизированный экземпляр
DbContextOptionsBuilder
для класса
ApplicationDbContext
, устанавливается поставщик баз данных SQL Server (с использованием строки подключения к экземпляру Docker из главы 21), после чего создается и возвращается новый экземпляр
ApplicationDbContext
:

using System;

Поделиться с друзьями: