Make RecDbContext model mapping fully configurable
Refactored RecDbContext to use DbModelOptions injected via IOptions, replacing hardcoded view and column names with configuration-driven mappings. This enables dynamic control of entity-to-database mapping through appsettings.json, improving flexibility and maintainability.
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
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) : DbContext(options), IRecDbContext
|
||||
public class RecDbContext(DbContextOptions<RecDbContext> options, IOptions<DbModelOptions> dbModelOptions) : DbContext(options), IRecDbContext
|
||||
{
|
||||
private readonly DbModelOptions _dbModelOptions = dbModelOptions.Value;
|
||||
|
||||
#region DB Sets
|
||||
public DbSet<RecActionView> RecActionViews { get; set; }
|
||||
|
||||
@@ -21,100 +25,102 @@ public class RecDbContext(DbContextOptions<RecDbContext> options) : DbContext(op
|
||||
public DbSet<InsertObjectResult> RecResults { get; set; }
|
||||
#endregion DB Sets
|
||||
|
||||
// TODO: Update to configure via appsettings.json
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
base.OnModelCreating(modelBuilder);
|
||||
|
||||
var actionOpt = _dbModelOptions.RecActionView;
|
||||
modelBuilder.Entity<RecActionView>(b =>
|
||||
{
|
||||
b.ToView("VWREC_ACTION", "dbo");
|
||||
b.ToView(actionOpt.View.Name, actionOpt.View.Schema);
|
||||
b.HasKey(e => e.Id);
|
||||
|
||||
b.Property(e => e.Id).HasColumnName("ACTION_GUID");
|
||||
b.Property(e => e.ProfileId).HasColumnName("PROFILE_ID");
|
||||
b.Property(e => e.ProfileName).HasColumnName("PROFILE_NAME");
|
||||
b.Property(e => e.ProfileType).HasColumnName("PROFILE_TYPE_ID");
|
||||
b.Property(e => e.Sequence).HasColumnName("SEQUENCE");
|
||||
b.Property(e => e.EndpointId).HasColumnName("ENDPOINT_ID");
|
||||
b.Property(e => e.EndpointUri).HasColumnName("ENDPOINT_URI");
|
||||
b.Property(e => e.EndpointAuthId).HasColumnName("ENDPOINT_AUTH_ID");
|
||||
b.Property(e => e.EndpointAuthType).HasColumnName("ENDPOINT_AUTH_TYPE_ID");
|
||||
b.Property(e => e.EndpointAuthTypeName).HasColumnName("ENDPOINT_AUTH_TYPE");
|
||||
b.Property(e => e.EndpointAuthApiKey).HasColumnName("ENDPOINT_AUTH_API_KEY");
|
||||
b.Property(e => e.EndpointAuthApiValue).HasColumnName("ENDPOINT_AUTH_API_VALUE");
|
||||
b.Property(e => e.EndpointAuthApiKeyAddTo).HasColumnName("ENDPOINT_AUTH_API_KEY_ADD_TO_ID");
|
||||
b.Property(e => e.EndpointAuthApiKeyAddToName).HasColumnName("ENDPOINT_AUTH_API_KEY_ADD_TO");
|
||||
b.Property(e => e.EndpointAuthToken).HasColumnName("ENDPOINT_AUTH_TOKEN");
|
||||
b.Property(e => e.EndpointAuthUsername).HasColumnName("ENDPOINT_AUTH_USERNAME");
|
||||
b.Property(e => e.EndpointAuthPassword).HasColumnName("ENDPOINT_AUTH_PASSWORD");
|
||||
b.Property(e => e.EndpointAuthDomain).HasColumnName("ENDPOINT_AUTH_DOMAIN");
|
||||
b.Property(e => e.EndpointAuthWorkstation).HasColumnName("ENDPOINT_AUTH_WORKSTATION");
|
||||
b.Property(e => e.EndpointParamsId).HasColumnName("ENDPOINT_PARAMS_ID");
|
||||
b.Property(e => e.SqlConnectionId).HasColumnName("SQL_CONNECTION_ID");
|
||||
b.Property(e => e.SqlConnectionServer).HasColumnName("SQL_CONNECTION_SERVER");
|
||||
b.Property(e => e.SqlConnectionDb).HasColumnName("SQL_CONNECTION_DB");
|
||||
b.Property(e => e.SqlConnectionUsername).HasColumnName("SQL_CONNECTION_USERNAME");
|
||||
b.Property(e => e.SqlConnectionPassword).HasColumnName("SQL_CONNECTION_PASSWORD");
|
||||
b.Property(e => e.RestType).HasColumnName("REST_TYPE_ID");
|
||||
b.Property(e => e.RestTypeName).HasColumnName("REST_TYPE");
|
||||
b.Property(e => e.PreprocessingQuery).HasColumnName("PREPROCESSING_QUERY");
|
||||
b.Property(e => e.HeaderQuery).HasColumnName("HEADER_QUERY");
|
||||
b.Property(e => e.BodyQuery).HasColumnName("BODY_QUERY");
|
||||
b.Property(e => e.PostprocessingQuery).HasColumnName("POSTPROCESSING_QUERY");
|
||||
b.Property(e => e.ErrorAction).HasColumnName("ERROR_ACTION_ID");
|
||||
b.Property(e => e.ErrorActionName).HasColumnName("ERROR_ACTION");
|
||||
b.Property(e => e.Id).HasColumnName(actionOpt.Id);
|
||||
b.Property(e => e.ProfileId).HasColumnName(actionOpt.ProfileId);
|
||||
b.Property(e => e.ProfileName).HasColumnName(actionOpt.ProfileName);
|
||||
b.Property(e => e.ProfileType).HasColumnName(actionOpt.ProfileType);
|
||||
b.Property(e => e.Sequence).HasColumnName(actionOpt.Sequence);
|
||||
b.Property(e => e.EndpointId).HasColumnName(actionOpt.EndpointId);
|
||||
b.Property(e => e.EndpointUri).HasColumnName(actionOpt.EndpointUri);
|
||||
b.Property(e => e.EndpointAuthId).HasColumnName(actionOpt.EndpointAuthId);
|
||||
b.Property(e => e.EndpointAuthType).HasColumnName(actionOpt.EndpointAuthType);
|
||||
b.Property(e => e.EndpointAuthTypeName).HasColumnName(actionOpt.EndpointAuthTypeName);
|
||||
b.Property(e => e.EndpointAuthApiKey).HasColumnName(actionOpt.EndpointAuthApiKey);
|
||||
b.Property(e => e.EndpointAuthApiValue).HasColumnName(actionOpt.EndpointAuthApiValue);
|
||||
b.Property(e => e.EndpointAuthApiKeyAddTo).HasColumnName(actionOpt.EndpointAuthApiKeyAddTo);
|
||||
b.Property(e => e.EndpointAuthApiKeyAddToName).HasColumnName(actionOpt.EndpointAuthApiKeyAddToName);
|
||||
b.Property(e => e.EndpointAuthToken).HasColumnName(actionOpt.EndpointAuthToken);
|
||||
b.Property(e => e.EndpointAuthUsername).HasColumnName(actionOpt.EndpointAuthUsername);
|
||||
b.Property(e => e.EndpointAuthPassword).HasColumnName(actionOpt.EndpointAuthPassword);
|
||||
b.Property(e => e.EndpointAuthDomain).HasColumnName(actionOpt.EndpointAuthDomain);
|
||||
b.Property(e => e.EndpointAuthWorkstation).HasColumnName(actionOpt.EndpointAuthWorkstation);
|
||||
b.Property(e => e.EndpointParamsId).HasColumnName(actionOpt.EndpointParamsId);
|
||||
b.Property(e => e.SqlConnectionId).HasColumnName(actionOpt.SqlConnectionId);
|
||||
b.Property(e => e.SqlConnectionServer).HasColumnName(actionOpt.SqlConnectionServer);
|
||||
b.Property(e => e.SqlConnectionDb).HasColumnName(actionOpt.SqlConnectionDb);
|
||||
b.Property(e => e.SqlConnectionUsername).HasColumnName(actionOpt.SqlConnectionUsername);
|
||||
b.Property(e => e.SqlConnectionPassword).HasColumnName(actionOpt.SqlConnectionPassword);
|
||||
b.Property(e => e.RestType).HasColumnName(actionOpt.RestType);
|
||||
b.Property(e => e.RestTypeName).HasColumnName(actionOpt.RestTypeName);
|
||||
b.Property(e => e.PreprocessingQuery).HasColumnName(actionOpt.PreprocessingQuery);
|
||||
b.Property(e => e.HeaderQuery).HasColumnName(actionOpt.HeaderQuery);
|
||||
b.Property(e => e.BodyQuery).HasColumnName(actionOpt.BodyQuery);
|
||||
b.Property(e => e.PostprocessingQuery).HasColumnName(actionOpt.PostprocessingQuery);
|
||||
b.Property(e => e.ErrorAction).HasColumnName(actionOpt.ErrorAction);
|
||||
b.Property(e => e.ErrorActionName).HasColumnName(actionOpt.ErrorActionName);
|
||||
|
||||
b.HasMany(e => e.Results)
|
||||
.WithOne(r => r.Action)
|
||||
.HasForeignKey(r => r.ActionId);
|
||||
});
|
||||
|
||||
var profileOpt = _dbModelOptions.ProfileView;
|
||||
modelBuilder.Entity<ProfileView>(b =>
|
||||
{
|
||||
b.ToView("VWREC_PROFILE", "dbo");
|
||||
b.ToView(profileOpt.View.Name, profileOpt.View.Schema);
|
||||
b.HasKey(e => e.Id);
|
||||
b.Property(e => e.Id).HasColumnName("PROFILE_GUID");
|
||||
b.Property(e => e.Active).HasColumnName("ACTIVE");
|
||||
b.Property(e => e.TypeId).HasColumnName("TYPE_ID");
|
||||
b.Property(e => e.Type).HasColumnName("TYPE");
|
||||
b.Property(e => e.Mandantor).HasColumnName("MANDANTOR");
|
||||
b.Property(e => e.ProfileName).HasColumnName("PROFILE_NAME");
|
||||
b.Property(e => e.Description).HasColumnName("DESCRIPTION");
|
||||
b.Property(e => e.LogLevelId).HasColumnName("LOG_LEVEL_ID");
|
||||
b.Property(e => e.LogLevel).HasColumnName("LOG_LEVEL");
|
||||
b.Property(e => e.LanguageId).HasColumnName("LANGUAGE_ID");
|
||||
b.Property(e => e.Language).HasColumnName("LANGUAGE");
|
||||
b.Property(e => e.AddedWho).HasColumnName("ADDED_WHO");
|
||||
b.Property(e => e.AddedWhen).HasColumnName("ADDED_WHEN");
|
||||
b.Property(e => e.ChangedWho).HasColumnName("CHANGED_WHO");
|
||||
b.Property(e => e.ChangedWhen).HasColumnName("CHANGED_WHEN");
|
||||
b.Property(e => e.FirstRun).HasColumnName("FIRST_RUN");
|
||||
b.Property(e => e.LastRun).HasColumnName("LAST_RUN");
|
||||
b.Property(e => e.LastResult).HasColumnName("LAST_RESULT");
|
||||
b.Property(e => e.Id).HasColumnName(profileOpt.Id);
|
||||
b.Property(e => e.Active).HasColumnName(profileOpt.Active);
|
||||
b.Property(e => e.TypeId).HasColumnName(profileOpt.TypeId);
|
||||
b.Property(e => e.Type).HasColumnName(profileOpt.Type);
|
||||
b.Property(e => e.Mandantor).HasColumnName(profileOpt.Mandantor);
|
||||
b.Property(e => e.ProfileName).HasColumnName(profileOpt.ProfileName);
|
||||
b.Property(e => e.Description).HasColumnName(profileOpt.Description);
|
||||
b.Property(e => e.LogLevelId).HasColumnName(profileOpt.LogLevelId);
|
||||
b.Property(e => e.LogLevel).HasColumnName(profileOpt.LogLevel);
|
||||
b.Property(e => e.LanguageId).HasColumnName(profileOpt.LanguageId);
|
||||
b.Property(e => e.Language).HasColumnName(profileOpt.Language);
|
||||
b.Property(e => e.AddedWho).HasColumnName(profileOpt.AddedWho);
|
||||
b.Property(e => e.AddedWhen).HasColumnName(profileOpt.AddedWhen);
|
||||
b.Property(e => e.ChangedWho).HasColumnName(profileOpt.ChangedWho);
|
||||
b.Property(e => e.ChangedWhen).HasColumnName(profileOpt.ChangedWhen);
|
||||
b.Property(e => e.FirstRun).HasColumnName(profileOpt.FirstRun);
|
||||
b.Property(e => e.LastRun).HasColumnName(profileOpt.LastRun);
|
||||
b.Property(e => e.LastResult).HasColumnName(profileOpt.LastResult);
|
||||
});
|
||||
|
||||
var resultOpt = _dbModelOptions.ResultView;
|
||||
modelBuilder.Entity<ResultView>(b =>
|
||||
{
|
||||
b.ToView("VWREC_RESULT", "dbo");
|
||||
b.ToView(resultOpt.View.Name, resultOpt.View.Schema);
|
||||
b.HasKey(e => e.Id);
|
||||
|
||||
b.Property(e => e.Id).HasColumnName("RESULT_GUID");
|
||||
b.Property(e => e.ActionId).HasColumnName("ACTION_ID");
|
||||
b.Property(e => e.ProfileId).HasColumnName("PROFILE_ID");
|
||||
b.Property(e => e.ProfileName).HasColumnName("PROFILE_NAME");
|
||||
b.Property(e => e.StatusCode).HasColumnName("STATUS_ID");
|
||||
b.Property(e => e.StatusName).HasColumnName("STATUS");
|
||||
b.Property(e => e.Type).HasColumnName("RESULT_TYPE_ID");
|
||||
b.Property(e => e.TypeName).HasColumnName("RESULT_TYPE");
|
||||
b.Property(e => e.Header).HasColumnName("RESULT_HEADER");
|
||||
b.Property(e => e.Body).HasColumnName("RESULT_BODY");
|
||||
b.Property(e => e.Info).HasColumnName("RESULT_INFO");
|
||||
b.Property(e => e.Error).HasColumnName("RESULT_ERROR");
|
||||
b.Property(e => e.AddedWho).HasColumnName("ADDED_WHO");
|
||||
b.Property(e => e.AddedWhen).HasColumnName("ADDED_WHEN");
|
||||
b.Property(e => e.ChangedWho).HasColumnName("CHANGED_WHO");
|
||||
b.Property(e => e.ChangedWhen).HasColumnName("CHANGED_WHEN");
|
||||
b.Property(e => e.Id).HasColumnName(resultOpt.Id);
|
||||
b.Property(e => e.ActionId).HasColumnName(resultOpt.ActionId);
|
||||
b.Property(e => e.ProfileId).HasColumnName(resultOpt.ProfileId);
|
||||
b.Property(e => e.ProfileName).HasColumnName(resultOpt.ProfileName);
|
||||
b.Property(e => e.StatusCode).HasColumnName(resultOpt.StatusCode);
|
||||
b.Property(e => e.StatusName).HasColumnName(resultOpt.StatusName);
|
||||
b.Property(e => e.Type).HasColumnName(resultOpt.Type);
|
||||
b.Property(e => e.TypeName).HasColumnName(resultOpt.TypeName);
|
||||
b.Property(e => e.Header).HasColumnName(resultOpt.Header);
|
||||
b.Property(e => e.Body).HasColumnName(resultOpt.Body);
|
||||
b.Property(e => e.Info).HasColumnName(resultOpt.Info);
|
||||
b.Property(e => e.Error).HasColumnName(resultOpt.Error);
|
||||
b.Property(e => e.AddedWho).HasColumnName(resultOpt.AddedWho);
|
||||
b.Property(e => e.AddedWhen).HasColumnName(resultOpt.AddedWhen);
|
||||
b.Property(e => e.ChangedWho).HasColumnName(resultOpt.ChangedWho);
|
||||
b.Property(e => e.ChangedWhen).HasColumnName(resultOpt.ChangedWhen);
|
||||
|
||||
b.HasOne(r => r.Action)
|
||||
.WithMany(a => a.Results)
|
||||
@@ -125,22 +131,25 @@ public class RecDbContext(DbContextOptions<RecDbContext> options) : DbContext(op
|
||||
.HasForeignKey(r => r.ProfileId);
|
||||
});
|
||||
|
||||
var headerOpt = _dbModelOptions.HeaderQueryResult;
|
||||
modelBuilder.Entity<HeaderQueryResult>(b =>
|
||||
{
|
||||
b.HasNoKey();
|
||||
b.Property(e => e.RawHeader).HasColumnName("REQUEST_HEADER");
|
||||
b.Property(e => e.RawHeader).HasColumnName(headerOpt.RawHeader);
|
||||
});
|
||||
|
||||
var bodyOpt = _dbModelOptions.BodyQueryResult;
|
||||
modelBuilder.Entity<BodyQueryResult>(b =>
|
||||
{
|
||||
b.HasNoKey();
|
||||
b.Property(e => e.RawBody).HasColumnName("REQUEST_BODY");
|
||||
b.Property(e => e.RawBody).HasColumnName(bodyOpt.RawBody);
|
||||
});
|
||||
|
||||
var insertOpt = _dbModelOptions.InsertObjectResult;
|
||||
modelBuilder.Entity<InsertObjectResult>(b =>
|
||||
{
|
||||
b.HasNoKey();
|
||||
b.Property(e => e.NewObjectId).HasColumnName("oGUID");
|
||||
b.Property(e => e.NewObjectId).HasColumnName(insertOpt.NewObjectId);
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user