Экземпляр 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);
}
}
}
Интерфейс командной строки задействует фабрику контекстов, чтобы создать экземпляр производного класса DbContext
CreateDbContext() аргументы из командной строки, о чем пойдет речь позже в главе.Метод OnModelCreating()
Базовый класс DbContext
OnModelCreating(), который применяется для придания формы сущностям, используя Fluent API. Детали подробно раскрываются далее в главе, а пока добавьте в класс ApplicationDbContext следующий код:protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Обращения к Fluent API.
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
Сохранение изменений
Чтобы заставить DbContext
ChangeTracker сохранить любые изменения, внесенные в отслеживаемые сущности, вызовите метод SaveChanges() (или SaveChangesAsync()) на экземпляре класса, производного от DbContext:static void SampleSaveChanges()
{
// Фабрика не предназначена для такого использования,
// но это демонстрационный код
var context = new ApplicationDbContextFactory().CreateDbContext(null);
// Внести какие-нибудь изменения.