Configurable EF view/column mapping via appsettings
Refactor ApplicationDbContext to use a configuration-driven approach for mapping view and column names, enabling dynamic mapping through appsettings.json. Add TableConfigurations classes, update DI registration, and include the necessary options package for configuration binding. This improves maintainability and flexibility for schema changes.
This commit is contained in:
@@ -1,49 +1,54 @@
|
||||
using DbFirst.Domain.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace DbFirst.Infrastructure;
|
||||
|
||||
public partial class ApplicationDbContext : DbContext
|
||||
{
|
||||
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
|
||||
private readonly TableConfigurations _config;
|
||||
|
||||
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IOptionsMonitor<TableConfigurations> configOptions)
|
||||
: base(options)
|
||||
{
|
||||
_config = configOptions.CurrentValue;
|
||||
}
|
||||
|
||||
public virtual DbSet<VwmyCatalog> VwmyCatalogs { get; set; }
|
||||
|
||||
// TODO: Configure column names on appsettings via IConfiguration
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
var catCfg = _config.VwmyCatalog;
|
||||
|
||||
modelBuilder.Entity<VwmyCatalog>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Guid);
|
||||
|
||||
entity.ToView("VWMY_CATALOG");
|
||||
entity.ToView(catCfg.ViewName);
|
||||
|
||||
entity.Property(e => e.Guid).HasColumnName("GUID");
|
||||
entity.Property(e => e.Guid).HasColumnName(catCfg.GuidColumnName);
|
||||
entity.Property(e => e.AddedWho)
|
||||
.HasMaxLength(30)
|
||||
.IsUnicode(false)
|
||||
.HasColumnName("ADDED_WHO");
|
||||
.HasColumnName(catCfg.AddedWhoColumnName);
|
||||
entity.Property(e => e.AddedWhen)
|
||||
.HasColumnType("datetime")
|
||||
.HasColumnName("ADDED_WHEN");
|
||||
.HasColumnName(catCfg.AddedWhenColumnName);
|
||||
entity.Property(e => e.CatString)
|
||||
.HasMaxLength(900)
|
||||
.IsUnicode(false)
|
||||
.HasColumnName("CAT_STRING");
|
||||
.HasColumnName(catCfg.CatStringColumnName);
|
||||
entity.Property(e => e.CatTitle)
|
||||
.HasMaxLength(100)
|
||||
.IsUnicode(false)
|
||||
.HasColumnName("CAT_TITLE");
|
||||
.HasColumnName(catCfg.CatTitleColumnName);
|
||||
entity.Property(e => e.ChangedWhen)
|
||||
.HasColumnType("datetime")
|
||||
.HasColumnName("CHANGED_WHEN");
|
||||
.HasColumnName(catCfg.ChangedWhenColumnName);
|
||||
entity.Property(e => e.ChangedWho)
|
||||
.HasMaxLength(30)
|
||||
.IsUnicode(false)
|
||||
.HasColumnName("CHANGED_WHO");
|
||||
.HasColumnName(catCfg.ChangedWhoColumnName);
|
||||
});
|
||||
|
||||
OnModelCreatingPartial(modelBuilder);
|
||||
|
||||
Reference in New Issue
Block a user