Refactor RecDbContext to remove dynamic view mapping

Removed dependency on DbModelOptions and IOptions. Entity-to-view mappings are now hardcoded in OnModelCreating with fixed view names and schema. Property-to-column mappings now use EF Core conventions. Simplifies configuration and maintenance, but reduces flexibility for schema changes. Entity relationships remain explicitly configured.
This commit is contained in:
2026-03-26 10:31:48 +01:00
parent fa9aa23f32
commit 6c56375e3e

View File

@@ -1,16 +1,12 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using ReC.Application.Common.Interfaces;
using ReC.Application.Common.Options.DbModel;
using ReC.Domain.QueryOutput;
using ReC.Domain.Views;
namespace ReC.Infrastructure;
public class RecDbContext(DbContextOptions<RecDbContext> options, IOptions<DbModelOptions> dbModelOptions) : DbContext(options), IRecDbContext
public class RecDbContext(DbContextOptions<RecDbContext> options) : DbContext(options), IRecDbContext
{
private readonly DbModelOptions _dbModelOptions = dbModelOptions.Value;
#region DB Sets
public DbSet<RecActionView> RecActionViews { get; set; }
@@ -29,118 +25,23 @@ public class RecDbContext(DbContextOptions<RecDbContext> options, IOptions<DbMod
{
base.OnModelCreating(modelBuilder);
ConfigureRecActionView(modelBuilder);
ConfigureProfileView(modelBuilder);
ConfigureResultView(modelBuilder);
ConfigureHeaderQueryResult(modelBuilder);
ConfigureBodyQueryResult(modelBuilder);
ConfigureInsertObjectResult(modelBuilder);
}
private void ConfigureRecActionView(ModelBuilder modelBuilder)
{
var opt = _dbModelOptions[nameof(RecActionView)];
modelBuilder.Entity<RecActionView>(b =>
{
b.ToView(opt.Name, opt.Schema);
b.HasKey(e => e.Id);
b.Property(e => e.Id).HasColumnName(opt[nameof(RecActionView.Id)]);
b.Property(e => e.ProfileId).HasColumnName(opt[nameof(RecActionView.ProfileId)]);
b.Property(e => e.ProfileName).HasColumnName(opt[nameof(RecActionView.ProfileName)]);
b.Property(e => e.ProfileType).HasColumnName(opt[nameof(RecActionView.ProfileType)]);
b.Property(e => e.Sequence).HasColumnName(opt[nameof(RecActionView.Sequence)]);
b.Property(e => e.EndpointId).HasColumnName(opt[nameof(RecActionView.EndpointId)]);
b.Property(e => e.EndpointUri).HasColumnName(opt[nameof(RecActionView.EndpointUri)]);
b.Property(e => e.EndpointAuthId).HasColumnName(opt[nameof(RecActionView.EndpointAuthId)]);
b.Property(e => e.EndpointAuthType).HasColumnName(opt[nameof(RecActionView.EndpointAuthType)]);
b.Property(e => e.EndpointAuthTypeName).HasColumnName(opt[nameof(RecActionView.EndpointAuthTypeName)]);
b.Property(e => e.EndpointAuthApiKey).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiKey)]);
b.Property(e => e.EndpointAuthApiValue).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiValue)]);
b.Property(e => e.EndpointAuthApiKeyAddTo).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiKeyAddTo)]);
b.Property(e => e.EndpointAuthApiKeyAddToName).HasColumnName(opt[nameof(RecActionView.EndpointAuthApiKeyAddToName)]);
b.Property(e => e.EndpointAuthToken).HasColumnName(opt[nameof(RecActionView.EndpointAuthToken)]);
b.Property(e => e.EndpointAuthUsername).HasColumnName(opt[nameof(RecActionView.EndpointAuthUsername)]);
b.Property(e => e.EndpointAuthPassword).HasColumnName(opt[nameof(RecActionView.EndpointAuthPassword)]);
b.Property(e => e.EndpointAuthDomain).HasColumnName(opt[nameof(RecActionView.EndpointAuthDomain)]);
b.Property(e => e.EndpointAuthWorkstation).HasColumnName(opt[nameof(RecActionView.EndpointAuthWorkstation)]);
b.Property(e => e.EndpointParamsId).HasColumnName(opt[nameof(RecActionView.EndpointParamsId)]);
b.Property(e => e.SqlConnectionId).HasColumnName(opt[nameof(RecActionView.SqlConnectionId)]);
b.Property(e => e.SqlConnectionServer).HasColumnName(opt[nameof(RecActionView.SqlConnectionServer)]);
b.Property(e => e.SqlConnectionDb).HasColumnName(opt[nameof(RecActionView.SqlConnectionDb)]);
b.Property(e => e.SqlConnectionUsername).HasColumnName(opt[nameof(RecActionView.SqlConnectionUsername)]);
b.Property(e => e.SqlConnectionPassword).HasColumnName(opt[nameof(RecActionView.SqlConnectionPassword)]);
b.Property(e => e.RestType).HasColumnName(opt[nameof(RecActionView.RestType)]);
b.Property(e => e.RestTypeName).HasColumnName(opt[nameof(RecActionView.RestTypeName)]);
b.Property(e => e.PreprocessingQuery).HasColumnName(opt[nameof(RecActionView.PreprocessingQuery)]);
b.Property(e => e.HeaderQuery).HasColumnName(opt[nameof(RecActionView.HeaderQuery)]);
b.Property(e => e.BodyQuery).HasColumnName(opt[nameof(RecActionView.BodyQuery)]);
b.Property(e => e.PostprocessingQuery).HasColumnName(opt[nameof(RecActionView.PostprocessingQuery)]);
b.Property(e => e.ErrorAction).HasColumnName(opt[nameof(RecActionView.ErrorAction)]);
b.Property(e => e.ErrorActionName).HasColumnName(opt[nameof(RecActionView.ErrorActionName)]);
b.ToView("VWREC_ACTION", "dbo");
b.HasMany(e => e.Results)
.WithOne(r => r.Action)
.HasForeignKey(r => r.ActionId);
});
}
private void ConfigureProfileView(ModelBuilder modelBuilder)
{
var opt = _dbModelOptions[nameof(ProfileView)];
modelBuilder.Entity<ProfileView>(b =>
{
b.ToView(opt.Name, opt.Schema);
b.HasKey(e => e.Id);
b.Property(e => e.Id).HasColumnName(opt[nameof(ProfileView.Id)]);
b.Property(e => e.Active).HasColumnName(opt[nameof(ProfileView.Active)]);
b.Property(e => e.TypeId).HasColumnName(opt[nameof(ProfileView.TypeId)]);
b.Property(e => e.Type).HasColumnName(opt[nameof(ProfileView.Type)]);
b.Property(e => e.Mandantor).HasColumnName(opt[nameof(ProfileView.Mandantor)]);
b.Property(e => e.ProfileName).HasColumnName(opt[nameof(ProfileView.ProfileName)]);
b.Property(e => e.Description).HasColumnName(opt[nameof(ProfileView.Description)]);
b.Property(e => e.LogLevelId).HasColumnName(opt[nameof(ProfileView.LogLevelId)]);
b.Property(e => e.LogLevel).HasColumnName(opt[nameof(ProfileView.LogLevel)]);
b.Property(e => e.LanguageId).HasColumnName(opt[nameof(ProfileView.LanguageId)]);
b.Property(e => e.Language).HasColumnName(opt[nameof(ProfileView.Language)]);
b.Property(e => e.AddedWho).HasColumnName(opt[nameof(ProfileView.AddedWho)]);
b.Property(e => e.AddedWhen).HasColumnName(opt[nameof(ProfileView.AddedWhen)]);
b.Property(e => e.ChangedWho).HasColumnName(opt[nameof(ProfileView.ChangedWho)]);
b.Property(e => e.ChangedWhen).HasColumnName(opt[nameof(ProfileView.ChangedWhen)]);
b.Property(e => e.FirstRun).HasColumnName(opt[nameof(ProfileView.FirstRun)]);
b.Property(e => e.LastRun).HasColumnName(opt[nameof(ProfileView.LastRun)]);
b.Property(e => e.LastResult).HasColumnName(opt[nameof(ProfileView.LastResult)]);
b.ToView("VWREC_PROFILE", "dbo");
});
}
private void ConfigureResultView(ModelBuilder modelBuilder)
{
var opt = _dbModelOptions[nameof(ResultView)];
modelBuilder.Entity<ResultView>(b =>
{
b.ToView(opt.Name, opt.Schema);
b.HasKey(e => e.Id);
b.Property(e => e.Id).HasColumnName(opt[nameof(ResultView.Id)]);
b.Property(e => e.ActionId).HasColumnName(opt[nameof(ResultView.ActionId)]);
b.Property(e => e.ProfileId).HasColumnName(opt[nameof(ResultView.ProfileId)]);
b.Property(e => e.ProfileName).HasColumnName(opt[nameof(ResultView.ProfileName)]);
b.Property(e => e.StatusCode).HasColumnName(opt[nameof(ResultView.StatusCode)]);
b.Property(e => e.StatusName).HasColumnName(opt[nameof(ResultView.StatusName)]);
b.Property(e => e.Type).HasColumnName(opt[nameof(ResultView.Type)]);
b.Property(e => e.TypeName).HasColumnName(opt[nameof(ResultView.TypeName)]);
b.Property(e => e.Header).HasColumnName(opt[nameof(ResultView.Header)]);
b.Property(e => e.Body).HasColumnName(opt[nameof(ResultView.Body)]);
b.Property(e => e.Info).HasColumnName(opt[nameof(ResultView.Info)]);
b.Property(e => e.Error).HasColumnName(opt[nameof(ResultView.Error)]);
b.Property(e => e.AddedWho).HasColumnName(opt[nameof(ResultView.AddedWho)]);
b.Property(e => e.AddedWhen).HasColumnName(opt[nameof(ResultView.AddedWhen)]);
b.Property(e => e.ChangedWho).HasColumnName(opt[nameof(ResultView.ChangedWho)]);
b.Property(e => e.ChangedWhen).HasColumnName(opt[nameof(ResultView.ChangedWhen)]);
b.ToView("VWREC_RESULT", "dbo");
b.HasOne(r => r.Action)
.WithMany(a => a.Results)
@@ -150,38 +51,20 @@ public class RecDbContext(DbContextOptions<RecDbContext> options, IOptions<DbMod
.WithMany()
.HasForeignKey(r => r.ProfileId);
});
}
private void ConfigureHeaderQueryResult(ModelBuilder modelBuilder)
{
var opt = _dbModelOptions[nameof(HeaderQueryResult)];
modelBuilder.Entity<HeaderQueryResult>(b =>
{
b.HasNoKey();
b.Property(e => e.RawHeader).HasColumnName(opt[nameof(HeaderQueryResult.RawHeader)]);
});
}
private void ConfigureBodyQueryResult(ModelBuilder modelBuilder)
{
var opt = _dbModelOptions[nameof(BodyQueryResult)];
modelBuilder.Entity<BodyQueryResult>(b =>
{
b.HasNoKey();
b.Property(e => e.RawBody).HasColumnName(opt[nameof(BodyQueryResult.RawBody)]);
});
}
private void ConfigureInsertObjectResult(ModelBuilder modelBuilder)
{
var opt = _dbModelOptions[nameof(InsertObjectResult)];
modelBuilder.Entity<InsertObjectResult>(b =>
{
b.HasNoKey();
b.Property(e => e.NewObjectId).HasColumnName(opt[nameof(InsertObjectResult.NewObjectId)]);
});
}
}