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:
@@ -1,16 +1,12 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
using ReC.Application.Common.Interfaces;
|
using ReC.Application.Common.Interfaces;
|
||||||
using ReC.Application.Common.Options.DbModel;
|
|
||||||
using ReC.Domain.QueryOutput;
|
using ReC.Domain.QueryOutput;
|
||||||
using ReC.Domain.Views;
|
using ReC.Domain.Views;
|
||||||
|
|
||||||
namespace ReC.Infrastructure;
|
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
|
#region DB Sets
|
||||||
public DbSet<RecActionView> RecActionViews { get; set; }
|
public DbSet<RecActionView> RecActionViews { get; set; }
|
||||||
|
|
||||||
@@ -29,118 +25,23 @@ public class RecDbContext(DbContextOptions<RecDbContext> options, IOptions<DbMod
|
|||||||
{
|
{
|
||||||
base.OnModelCreating(modelBuilder);
|
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 =>
|
modelBuilder.Entity<RecActionView>(b =>
|
||||||
{
|
{
|
||||||
b.ToView(opt.Name, opt.Schema);
|
b.ToView("VWREC_ACTION", "dbo");
|
||||||
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.HasMany(e => e.Results)
|
b.HasMany(e => e.Results)
|
||||||
.WithOne(r => r.Action)
|
.WithOne(r => r.Action)
|
||||||
.HasForeignKey(r => r.ActionId);
|
.HasForeignKey(r => r.ActionId);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
private void ConfigureProfileView(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
var opt = _dbModelOptions[nameof(ProfileView)];
|
|
||||||
|
|
||||||
modelBuilder.Entity<ProfileView>(b =>
|
modelBuilder.Entity<ProfileView>(b =>
|
||||||
{
|
{
|
||||||
b.ToView(opt.Name, opt.Schema);
|
b.ToView("VWREC_PROFILE", "dbo");
|
||||||
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)]);
|
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
private void ConfigureResultView(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
var opt = _dbModelOptions[nameof(ResultView)];
|
|
||||||
|
|
||||||
modelBuilder.Entity<ResultView>(b =>
|
modelBuilder.Entity<ResultView>(b =>
|
||||||
{
|
{
|
||||||
b.ToView(opt.Name, opt.Schema);
|
b.ToView("VWREC_RESULT", "dbo");
|
||||||
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.HasOne(r => r.Action)
|
b.HasOne(r => r.Action)
|
||||||
.WithMany(a => a.Results)
|
.WithMany(a => a.Results)
|
||||||
@@ -150,38 +51,20 @@ public class RecDbContext(DbContextOptions<RecDbContext> options, IOptions<DbMod
|
|||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey(r => r.ProfileId);
|
.HasForeignKey(r => r.ProfileId);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
private void ConfigureHeaderQueryResult(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
var opt = _dbModelOptions[nameof(HeaderQueryResult)];
|
|
||||||
|
|
||||||
modelBuilder.Entity<HeaderQueryResult>(b =>
|
modelBuilder.Entity<HeaderQueryResult>(b =>
|
||||||
{
|
{
|
||||||
b.HasNoKey();
|
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 =>
|
modelBuilder.Entity<BodyQueryResult>(b =>
|
||||||
{
|
{
|
||||||
b.HasNoKey();
|
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 =>
|
modelBuilder.Entity<InsertObjectResult>(b =>
|
||||||
{
|
{
|
||||||
b.HasNoKey();
|
b.HasNoKey();
|
||||||
b.Property(e => e.NewObjectId).HasColumnName(opt[nameof(InsertObjectResult.NewObjectId)]);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user