Класс DbContext
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
Конфигурирование экземпляра DbContext
Экземпляр DbContext
DbContextOptions. Экземпляр DbContextOptions создается с применением DbContextOptionsBuilder, т.к. класс DbContextOptions не рассчитан на создание экземпляров непосредственно в коде. Через экземпляр DbContextOptionsBuilder выбирается поставщик базы данных (наряду с любыми настройками, касающимися поставщика) и устанавливаются общие параметры экземпляра DbContext инфраструктуры EF Core (наподобие ведения журнала). Затем свойство Options внедряется в базовый класс DbContext во время выполнения.Такая возможность динамического конфигурирования позволяет изменять настройки во время выполнения, просто выбирая разные параметры (скажем, поставщик MySQL вместо SQL Server) и создавая новый экземпляр производного класса DbContext
Фабрика DbContext этапа проектирования
Фабрика DbContext
IDesignTimeDbContextFactory, где Т — класс, производный от DbContext. Интерфейс IDesignTimeDbContextFactory имеет один метод CreateDbContext, который должен быть реализован для создания экземпляра производного класса DbContext.В показанном ниже классе ApplicationDbContextFactory
CreateDbContext создается строго типизированный экземпляр DbContextOptionsBuilder для класса ApplicationDbContext, устанавливается поставщик баз данных SQL Server (с использованием строки подключения к экземпляру Docker из главы 21), после чего создается и возвращается новый экземпляр ApplicationDbContext:using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
namespace AutoLot.Samples
{
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory
Context>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder
var connectionString =
@"server=.,5433;Database=AutoLotSamples;
User Id=sa;Password=
P@ssw0rd;"; optionsBuilder.UseSqlServer(connectionString);
Console.WriteLine(connectionString);
return new ApplicationDbContext(optionsBuilder.Options);
}
}
}
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT