Files
DbFirst/DbFirst.Infrastructure/ApplicationDbContext.cs
OlgunR 6c2b1884d2 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.
2026-01-19 16:25:08 +01:00

59 lines
2.0 KiB
C#

using DbFirst.Domain.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
namespace DbFirst.Infrastructure;
public partial class ApplicationDbContext : DbContext
{
private readonly TableConfigurations _config;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options, IOptionsMonitor<TableConfigurations> configOptions)
: base(options)
{
_config = configOptions.CurrentValue;
}
public virtual DbSet<VwmyCatalog> VwmyCatalogs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var catCfg = _config.VwmyCatalog;
modelBuilder.Entity<VwmyCatalog>(entity =>
{
entity.HasKey(e => e.Guid);
entity.ToView(catCfg.ViewName);
entity.Property(e => e.Guid).HasColumnName(catCfg.GuidColumnName);
entity.Property(e => e.AddedWho)
.HasMaxLength(30)
.IsUnicode(false)
.HasColumnName(catCfg.AddedWhoColumnName);
entity.Property(e => e.AddedWhen)
.HasColumnType("datetime")
.HasColumnName(catCfg.AddedWhenColumnName);
entity.Property(e => e.CatString)
.HasMaxLength(900)
.IsUnicode(false)
.HasColumnName(catCfg.CatStringColumnName);
entity.Property(e => e.CatTitle)
.HasMaxLength(100)
.IsUnicode(false)
.HasColumnName(catCfg.CatTitleColumnName);
entity.Property(e => e.ChangedWhen)
.HasColumnType("datetime")
.HasColumnName(catCfg.ChangedWhenColumnName);
entity.Property(e => e.ChangedWho)
.HasMaxLength(30)
.IsUnicode(false)
.HasColumnName(catCfg.ChangedWhoColumnName);
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}