Проблема при создании фабрики контекста в чистой архитектуреC#

Место общения программистов C#
Ответить
Anonymous
 Проблема при создании фабрики контекста в чистой архитектуре

Сообщение Anonymous »

Позвольте мне рассказать вам о проблеме, с которой я столкнулся:
Я пытаюсь реализовать CA в простом веб-API ASP.NET Core. Прямо сейчас у меня есть все настройки .Presentation, .Infrastructure и .Application.
Но когда я попытался обновить базу данных с помощью настроенных мной объектов DbContext. Сначала меня встретили эта ошибка:

Невозможно создать «DbContext» типа «AppDbContext». Исключение
"Метод или операция не реализована". был выброшен при
попытке создания экземпляра. Сведения о различных шаблонах, поддерживаемых
во время разработки, см. на странице https://go.microsoft.com/fwlink/?linkid=851728

После. После некоторых исследований я понял, что это произошло потому, что на моем уровне .Presentation я на самом деле настраивал и ссылался на AppDbContext на уровне .Infrastructure.
Мне было недостаточно инициализировать его через ContextFactory.
После небольшого исследования я нашел модель ContextFactory в основной книге Ultimate Asp.Net.

Код: Выделить всё

 public class AppContextFactory : IDesignTimeDbContextFactory
{
public AppDbContext CreateDbContext(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var builder = new DbContextOptionsBuilder()
.UseSqlServer(configuration.GetConnectionString("Default"),
b => b.MigrationsAssembly("Clean.Presentation"));
return new AppDbContext(builder.Options);
}
}
После реализации указанной ContextFactory на моем уровне .Presentation я был удивлен, увидев, что ошибка при попытке обновления базы данных продолжает появляться.
Я все еще изучаю эти шаблоны и технологии, поэтому не уверен, что делать дальше.
Это все соответствующие части:
Это мой AppDbContext в моей инфраструктуре Слой:

Код: Выделить всё

public AppDbContext(DbContextOptions options) : base(options) { }

protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfiguration(new PersonaConfiguration());

//Initial Seeder

......

base.OnModelCreating(builder);
}

public DbSet Usuarios { get; set; } = null!;
public DbSet Cargos { get; set; } = null!;
public DbSet CargoAsignados { get; set; } = null!;
public DbSet
 Personas { get; set; } = null!;
}
Как вы можете видеть довольно простые вещи.
Это конфигурация моих расширений служб на моем уровне .Presentation:

Код: Выделить всё

 public static void ConfigureDbContext(this IServiceCollection services, IConfiguration config)
{
services.AddDbContext(options =>
{
options.UseSqlServer(config.GetConnectionString("Default"));
});
}
И его реализация в конвейере:

Код: Выделить всё

builder.Services.ConfigureDbContext(builder.Configuration);
Если вы хотите проверить весь проект, это репозиторий Github: https://github.com/yzkael/CleanArchitec ... OwnTake-V2
Я все еще новичок в ASP.NET Core и CA. Поэтому мы будем очень признательны за любые отзывы и рекомендации по реализации или ЦС в целом!
Спасибо, что уделили время!

Подробнее здесь: https://stackoverflow.com/questions/793 ... chitecture
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»