feat: Konfigurierbare Tabellennamenregel in WebApiContextOptions hinzugefügt
- Einführung der WebApiContextOptions-Klasse mit einer Nullable-String-Eigenschaft `TableNamingRule`. - Ermöglicht die Konfiguration von `TableNamingRule` über Anwendungseinstellungen (z.B. 'DIGITAL_DATA', 'PREPARED-SQL'). - Aktualisierte Dependency Injection-Einrichtung, um WebApiContextOptions aus der Konfiguration zu konfigurieren.
This commit is contained in:
parent
4387d62865
commit
1d8ae2c371
@ -1,19 +1,24 @@
|
||||
using DAL._Shared.SharedModels;
|
||||
using DAL.Models.Entities;
|
||||
using HRD.WebApi.DAL;
|
||||
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Linq;
|
||||
|
||||
namespace DAL
|
||||
{
|
||||
public partial class WebApiContext : WebApiBaseContext
|
||||
{
|
||||
public WebApiContext(DbContextOptions<WebApiContext> options) : base(options)
|
||||
private readonly WebApiContextOptions _options;
|
||||
|
||||
private readonly ILogger<WebApiContext> _logger;
|
||||
|
||||
public WebApiContext(DbContextOptions<WebApiContext> options, IOptions<WebApiContextOptions> webApiContextOptions, ILogger<WebApiContext> logger) : base(options)
|
||||
{
|
||||
_options = webApiContextOptions.Value;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public virtual DbSet<WebAppUser> WebAppUserSet { get; set; }
|
||||
@ -48,7 +53,333 @@ namespace DAL
|
||||
public virtual DbSet<WindreamSearchToDepartment> WindreamSearchToDepartmentSet { get; set; }
|
||||
public virtual DbSet<WindreamInputFolder> WindreamInputFolderSet { get; set; }
|
||||
public virtual DbSet<Subsidiary> SubsidiarySet { get; set; }
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
switch(_options.TableNamingRule)
|
||||
{
|
||||
case "DIGITAL_DATA":
|
||||
OnModelCreating_DDSQLNaming(modelBuilder);
|
||||
break;
|
||||
case "PREPARED-SQL":
|
||||
OnModelCreating_PreparedSQL(modelBuilder);
|
||||
break;
|
||||
default:
|
||||
_logger.LogWarning($"The WebApiContextOptions.TableNamingRule is set to {_options?.TableNamingRule ?? "NULL"} in appsettings.json. Hence, it has been defaulted to PREPARED-SQL.");
|
||||
OnModelCreating_PreparedSQL(modelBuilder);
|
||||
break;
|
||||
}
|
||||
|
||||
base.OnModelCreating(modelBuilder);
|
||||
}
|
||||
|
||||
protected static void OnModelCreating_PreparedSQL(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<Subsidiary>(entity =>
|
||||
{
|
||||
entity.ToTable("Subsidiary", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamInputFolder>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamInputFolder", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearchToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearchToDepartment", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearchItemToWindreamSearchToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearchItemToWindreamSearchToDepartment", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearchItem>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearchItem", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearch>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearch", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamIndexToWindreamSearchToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamIndexToWindreamSearchToDepartment", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamIndex>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamIndex", "ecm");
|
||||
});
|
||||
|
||||
// 'WindreamColumnsToDepartment' tablosu güncellenmiş listeye dahil değil
|
||||
|
||||
modelBuilder.Entity<WebAppToWebAppRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppToWebAppRole", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppToWebAppAdditionalRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppToWebAppAdditionalRole", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppToDepartment", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppAdditionalRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppAdditionalRole", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeToWebApp>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeToWebApp", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeToDepartment", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeToAttribute>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeToAttribute", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Employee>(entity =>
|
||||
{
|
||||
entity.ToTable("Employee", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DocumentArtToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("DocumentArtToDepartment", "ecm");
|
||||
});
|
||||
|
||||
// 'DepartmentToWebAppToEmployeeForWindream' tablosu güncellenmiş listeye dahil değil
|
||||
|
||||
modelBuilder.Entity<WebAppRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppRole", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebApp>(entity =>
|
||||
{
|
||||
entity.ToTable("WebApp", "dbo");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Rang>(entity =>
|
||||
{
|
||||
entity.ToTable("Rang", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Project>(entity =>
|
||||
{
|
||||
entity.ToTable("Project", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeStatus>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeStatus", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeAttribute>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeAttribute", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DocumentArt>(entity =>
|
||||
{
|
||||
entity.ToTable("DocumentArt", "ecm");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Department>(entity =>
|
||||
{
|
||||
entity.ToTable("Department", "hr");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<CostCentre>(entity =>
|
||||
{
|
||||
entity.ToTable("CostCentre", "hr");
|
||||
});
|
||||
|
||||
// 'AdWebAppToWebAppRole' tablosu güncellenmiş listeye dahil değil
|
||||
|
||||
modelBuilder.Entity<WebAppUser>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppUser", "dbo");
|
||||
});
|
||||
|
||||
// 'WebAppEmployeeInfo' tablosu güncellenmiş listeye dahil değil
|
||||
}
|
||||
|
||||
protected static void OnModelCreating_ClassName(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<Subsidiary>(entity =>
|
||||
{
|
||||
entity.ToTable("Subsidiary", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamInputFolder>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamInputFolder", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearchToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearchToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearchItemToWindreamSearchToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearchItemToWindreamSearchToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearchItem>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearchItem", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamSearch>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamSearch", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamIndexToWindreamSearchToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamIndexToWindreamSearchToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamIndex>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamIndex", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WindreamColumnsToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WindreamColumnsToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppToWebAppRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppToWebAppRole", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppToWebAppAdditionalRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppToWebAppAdditionalRole", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppAdditionalRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppAdditionalRole", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeToWebApp>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeToWebApp", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeToAttribute>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeToAttribute", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Employee>(entity =>
|
||||
{
|
||||
entity.ToTable("Employee", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DocumentArtToDepartment>(entity =>
|
||||
{
|
||||
entity.ToTable("DocumentArtToDepartment", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DepartmentToWebAppToEmployeeForWindream>(entity =>
|
||||
{
|
||||
entity.ToTable("DepartmentToWebAppToEmployeeForWindream", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppRole>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppRole", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebApp>(entity =>
|
||||
{
|
||||
entity.ToTable("WebApp", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Rang>(entity =>
|
||||
{
|
||||
entity.ToTable("Rang", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Project>(entity =>
|
||||
{
|
||||
entity.ToTable("Project", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeStatus>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeStatus", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<EmployeeAttribute>(entity =>
|
||||
{
|
||||
entity.ToTable("EmployeeAttribute", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<DocumentArt>(entity =>
|
||||
{
|
||||
entity.ToTable("DocumentArt", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Department>(entity =>
|
||||
{
|
||||
entity.ToTable("Department", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<CostCentre>(entity =>
|
||||
{
|
||||
entity.ToTable("CostCentre", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<AdWebAppToWebAppRole>(entity =>
|
||||
{
|
||||
entity.ToTable("AdWebAppToWebAppRole", "webapi");
|
||||
});
|
||||
|
||||
|
||||
modelBuilder.Entity<WebAppUser>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppUser", "webapi");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<WebAppEmployeeInfo>(entity =>
|
||||
{
|
||||
entity.ToTable("WebAppEmployeeInfo", "webapi");
|
||||
});
|
||||
}
|
||||
|
||||
#region MODEL CREATIN FOR DIGIDAL-DATA NAMING
|
||||
protected static void OnModelCreating_DDSQLNaming(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<Subsidiary>(entity =>
|
||||
{
|
||||
@ -206,11 +537,9 @@ namespace DAL
|
||||
});
|
||||
|
||||
Configure4DDNaming(modelBuilder.Model.GetEntityTypes().ToArray());
|
||||
|
||||
base.OnModelCreating(modelBuilder);
|
||||
}
|
||||
|
||||
public static void Configure4DDNaming(params IMutableEntityType[] entityTypes)
|
||||
private static void Configure4DDNaming(params IMutableEntityType[] entityTypes)
|
||||
{
|
||||
foreach (var entityType in entityTypes)
|
||||
{
|
||||
@ -233,5 +562,6 @@ namespace DAL
|
||||
var startUnderscores = System.Text.RegularExpressions.Regex.Match(input, @"^_+");
|
||||
return startUnderscores + System.Text.RegularExpressions.Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToUpper();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
9
DAL/WebApiContextOptions.cs
Normal file
9
DAL/WebApiContextOptions.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace DAL
|
||||
{
|
||||
#nullable enable
|
||||
public class WebApiContextOptions
|
||||
{
|
||||
public string? TableNamingRule { get; init; } = null;
|
||||
}
|
||||
#nullable restore
|
||||
}
|
||||
@ -107,6 +107,8 @@ try
|
||||
|
||||
var cnnStr = WebApiConfig.ConnectionString(EN_ConnectionType.SQLServer);
|
||||
|
||||
builder.Services.Configure<WebApiContextOptions>(builder.Configuration.GetSection("WebApiContextOptions"));
|
||||
|
||||
builder.Services.AddDbContext<WebApiContext>(options =>
|
||||
{
|
||||
const int dbTimeoutInMin = 5;
|
||||
|
||||
@ -5,7 +5,8 @@
|
||||
}
|
||||
},
|
||||
"ConnectionStrings": {
|
||||
"sqlConnection": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
|
||||
"sqlConnection": "Server=SDD-VMP04-SQL17\\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;",
|
||||
"sqlConnection19": "Server=SDD-VMP04-SQL19\\DD_DEVELOP01;Database=DD_StaffDB;User Id=sa;Password=dd;Encrypt=false;TrustServerCertificate=True;"
|
||||
},
|
||||
"AppConfig": {
|
||||
"LDAP_WebAppGroup_Is_Live": "false",
|
||||
@ -37,5 +38,11 @@
|
||||
"LDAP_EDM_Prefix": "GG_EDM",
|
||||
"LDAP_WebAppp_Prefix": "GG_WebApp",
|
||||
"LDAP_Prefix_Test": "__Test"
|
||||
},
|
||||
// else if created with prepared crate table SQL,TableNamingRule is 'PREPARED-SQL' (e.g. dbo.Subsidiary, ecm.WindreamIndexToWindreamSearchToDepartment)
|
||||
// else if you follow digital data SQL table naming rules, TableNamingRule is 'DIGITAL_DATA' (e.g. TBSTF_WEB_APP_ROLE)
|
||||
// otherwise, TableNamingRule is 'PREPARED-SQL'
|
||||
"WebApiContextOptions": {
|
||||
"TableNamingRule": "DIGITAL_DATA"
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user