Я пытаюсь реализовать 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);
}
}
Я все еще изучаю эти шаблоны и технологии, поэтому не уверен, что делать дальше.
Это все соответствующие части:
Это мой 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);
Я все еще новичок в ASP.NET Core и CA. Поэтому мы будем очень признательны за любые отзывы и рекомендации по реализации или ЦС в целом!
Спасибо, что уделили время!
Подробнее здесь: https://stackoverflow.com/questions/793 ... chitecture
Мобильная версия