Конфигурация и создание контекста

Редактировал(а) Alexandr Fokin 2023/08/12 10:40

 Реализацию общего контекста в возможностью внедрения различных конфигураторов.
В том числе при необходимости можно реализовать конфигуратор под разные БД (Учитывая, что обе БД поддерживаются заложенный в контекст функционал, а сырые (Raw) запросы (и хранимые функции) написаны под обе версии СУБД и также внедряются в зависимости от типа)
Встроенные механизмы

Интерфейс IEntityTypeConfiguration и IDesignTimeServices для конфигурации контекста (в частности для манипуляции миграциями).
Интерфейс IEntitytypeconfiguration для конфигурации сущностей

Design-time DbContext Creation
https://docs.microsoft.com/en-us/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli

Кастомный инициализаторpublic class AppDbContext
  : DbContext
{
 private readonly IContextConfigurator Configurator;


 public AppDbContext(
    IContextConfigurator configurator
  )
  {
    Configurator = configurator;
  }


 protected override void OnModelCreating(
    ModelBuilder builder
  )
  {
   //Конфигурация модели, маппинга классов на таблицы.

   base.OnModelCreating(builder);
    Configurator.OnModelCreating(builder);                       
  }
       
 protected override void OnConfiguring(
    DbContextOptionsBuilder optionsBuilder
  )        
  {
   // Подключение к БД

   base.OnConfiguring(optionsBuilder);
    Configurator.OnConfiguring(optionsBuilder);
  }
}
Инициализация данных

Инициализация с использованием встроенного механизма (на основе Миграции):

EntityTypeBuilder.HasData
https://learn.microsoft.com/ru-ru/dotnet/api/microsoft.entityframeworkcore.metadata.builders.entitytypebuilder.hasdata?view=efcore-7.0

Самодельный модуль, вызываемый при старте приложения (не используя Миграции, что может быть как плюсом, так и минусом).
Требуется явный вызов метода.
Логики:
1) создать если не существует
2) обновить если существует, но не соответствует нужному значению 
Самодельные решение на основе Миграции, на основе сценария Собственная кастомная логика создания миграций, используя расширенную самодельную конфигурацию данных.
Теги: