Probleme beim Erstellen einer Kontextfabrik in sauberer ArchitekturC#

Ein Treffpunkt für C#-Programmierer
Guest
 Probleme beim Erstellen einer Kontextfabrik in sauberer Architektur

Post by Guest »

Lassen Sie mich Ihnen etwas Kontext zu dem Problem geben, mit dem ich konfrontiert bin:
Ich versuche, CA in einer einfachen ASP.NET Core-Web-API zu implementieren. Im Moment habe ich .Presentation, .Infrastructure und .Application alle eingerichtet.
Aber als ich versuchte, die Datenbank mit den DbContext-Entitäten zu aktualisieren, die ich eingerichtet hatte … wurde ich zuerst mit … konfrontiert Dieser Fehler:

Es konnte kein „DbContext“ vom Typ „AppDbContext“ erstellt werden. Die Ausnahme
'Die Methode oder Operation ist nicht implementiert.' wurde beim
Versuch, eine Instanz zu erstellen, ausgelöst. Informationen zu den verschiedenen zur Entwurfszeit unterstützten Mustern finden Sie unter https://go.microsoft.com/fwlink/?linkid=851728

Nachher Nach einigen Recherchen wurde mir klar, dass dies daran lag, dass ich in meiner .Presentation-Ebene tatsächlich den AppDbContext innerhalb der .Infrastructure-Ebene konfigurierte und referenzierte.
Es war nicht genug, ich musste es über a initialisieren ContextFactory.
Nach etwas mehr Recherche habe ich ein ContextFactory-Modell im Ultimate Asp.Net Core-Buch gefunden.

Code: Select all

 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);
}
}
Nachdem ich besagte ContextFactory in meiner .Presentation-Ebene implementiert hatte, war ich überrascht, dass der Fehler beim Versuch, die Datenbank zu aktualisieren, weiterhin auftrat.
Ja Ich lerne immer noch etwas über diese Muster und Technologien, daher bin ich mir nicht sicher, wohin ich als nächstes gehen soll.
Dies sind alle relevanten Teile:
Dies ist mein AppDbContext innerhalb meiner Infrastrukturschicht:

Code: Select all

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!;
}
Wie Sie sehen können, sind das ziemlich grundlegende Dinge.
Dies ist die Konfiguration innerhalb meiner Service-Erweiterungen in meiner .Presentation-Ebene:

Code: Select all

 public static void ConfigureDbContext(this IServiceCollection services, IConfiguration config)
{
services.AddDbContext(options =>
{
options.UseSqlServer(config.GetConnectionString("Default"));
});
}
Und seine Implementierung innerhalb der Pipeline:

Code: Select all

builder.Services.ConfigureDbContext(builder.Configuration);
Falls Sie das gesamte Projekt überprüfen möchten, ist dies das Github Repo: https://github.com/yzkael/CleanArchitec ... OwnTake-V2
Ich bin noch ziemlich neu in ASP.NET Core und CA. Wir freuen uns daher über jedes Feedback oder jede Anleitung zur Implementierung oder zur Zertifizierungsstelle im Allgemeinen!
Vielen Dank für Ihre Zeit!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post