using DAL._Shared.SharedModels; using DAL.Models.Entities; using HRD.WebApi.DAL; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System.Linq; namespace DAL { public partial class WebApiContext : WebApiBaseContext { private readonly WebApiContextOptions _options; private readonly ILogger _logger; public WebApiContext(DbContextOptions options, IOptions webApiContextOptions, ILogger logger) : base(options) { _options = webApiContextOptions.Value; _logger = logger; } public virtual DbSet WebAppUserSet { get; set; } public virtual DbSet WebAppEmployeeInfo { get; set; } public virtual DbSet AdWebAppToWebAppRoleSet { get; set; } public virtual DbSet CostCentreSet { get; set; } public virtual DbSet DepartmentSet { get; set; } public virtual DbSet DocumentArtSet { get; set; } public virtual DbSet EmployeeAttributeSet { get; set; } public virtual DbSet EmployeeStatusSet { get; set; } public virtual DbSet ProjectSet { get; set; } public virtual DbSet RangSet { get; set; } public virtual DbSet WebAppSet { get; set; } public virtual DbSet WebAppRoleSet { get; set; } public virtual DbSet DepartmentToWebAppToEmployeeForWindreamSet { get; set; } public virtual DbSet DocumentArtToDepartmentSet { get; set; } public virtual DbSet EmployeeSet { get; set; } public virtual DbSet EmployeeToAttributeSet { get; set; } public virtual DbSet EmployeeToDepartmentSet { get; set; } public virtual DbSet EmployeeToWebAppSet { get; set; } public virtual DbSet WebAppAdditionalRoleSet { get; set; } public virtual DbSet WebAppToDepartmentSet { get; set; } public virtual DbSet WebAppToWebAppAdditionalRoleSet { get; set; } public virtual DbSet WebAppToWebAppRoleSet { get; set; } public virtual DbSet WindreamColumnsToDepartmentSet { get; set; } public virtual DbSet WindreamIndexSet { get; set; } public virtual DbSet WindreamIndexToWindreamSearchToDepartmentSet { get; set; } public virtual DbSet WindreamSearchSet { get; set; } public virtual DbSet WindreamSearchItemSet { get; set; } public virtual DbSet WindreamSearchItemToWindreamSearchToDepartmentSet { get; set; } public virtual DbSet WindreamSearchToDepartmentSet { get; set; } public virtual DbSet WindreamInputFolderSet { get; set; } public virtual DbSet 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(entity => { entity.ToTable("Subsidiary", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamInputFolder", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearchToDepartment", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearchItemToWindreamSearchToDepartment", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearchItem", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearch", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamIndexToWindreamSearchToDepartment", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamIndex", "ecm"); }); // 'WindreamColumnsToDepartment' tablosu güncellenmiş listeye dahil değil modelBuilder.Entity(entity => { entity.ToTable("WebAppToWebAppRole", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppToWebAppAdditionalRole", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppToDepartment", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppAdditionalRole", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeToWebApp", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeToDepartment", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeToAttribute", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("Employee", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("DocumentArtToDepartment", "ecm"); }); // 'DepartmentToWebAppToEmployeeForWindream' tablosu güncellenmiş listeye dahil değil modelBuilder.Entity(entity => { entity.ToTable("WebAppRole", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("WebApp", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("Rang", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("Project", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeStatus", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeAttribute", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("DocumentArt", "ecm"); }); modelBuilder.Entity(entity => { entity.ToTable("Department", "hr"); }); modelBuilder.Entity(entity => { entity.ToTable("CostCentre", "hr"); }); // 'AdWebAppToWebAppRole' tablosu güncellenmiş listeye dahil değil modelBuilder.Entity(entity => { entity.ToTable("WebAppUser", "dbo"); }); // 'WebAppEmployeeInfo' tablosu güncellenmiş listeye dahil değil } protected static void OnModelCreating_ClassName(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.ToTable("Subsidiary", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamInputFolder", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearchToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearchItemToWindreamSearchToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearchItem", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamSearch", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamIndexToWindreamSearchToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamIndex", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WindreamColumnsToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppToWebAppRole", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppToWebAppAdditionalRole", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppAdditionalRole", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeToWebApp", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeToAttribute", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("Employee", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("DocumentArtToDepartment", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("DepartmentToWebAppToEmployeeForWindream", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppRole", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebApp", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("Rang", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("Project", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeStatus", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("EmployeeAttribute", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("DocumentArt", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("Department", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("CostCentre", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("AdWebAppToWebAppRole", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppUser", "webapi"); }); modelBuilder.Entity(entity => { entity.ToTable("WebAppEmployeeInfo", "webapi"); }); } #region MODEL CREATIN FOR DIGIDAL-DATA NAMING protected static void OnModelCreating_DDSQLNaming(ModelBuilder modelBuilder) { modelBuilder.Entity(entity => { entity.ToTable("TBSTF_SUBSIDIARY", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_INPUT_FOLDER", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_SEARCH_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_SEARCH_ITEM_TO_WINDREAM_SEARCH_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_SEARCH_ITEM", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_SEARCH", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_INDEX_TO_WINDREAM_SEARCH_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_INDEX", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WINDREAM_COLUMNS_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_TO_WEB_APP_ROLE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_TO_WEB_APP_ADDITIONAL_ROLE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_ADDITIONAL_ROLE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_EMPLOYEE_TO_WEB_APP", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_EMPLOYEE_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_EMPLOYEE_TO_ATTRIBUTE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_EMPLOYEE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_DOCUMENT_ART_TO_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_DEPARTMENT_TO_WEB_APP_TO_EMPLOYEE_FOR_WINDREAM", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_ROLE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_RANG", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_PROJECT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_EMPLOYEE_STATUS", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_EMPLOYEE_ATTRIBUTE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_DOCUMENT_ART", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_DEPARTMENT", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_COST_CENTRE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_AD_WEB_APP_TO_WEB_APP_ROLE", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_USER", "dbo"); }); modelBuilder.Entity(entity => { entity.ToTable("TBSTF_WEB_APP_EMPLOYEE_INFO", "dbo"); }); Configure4DDNaming(modelBuilder.Model.GetEntityTypes().ToArray()); } private static void Configure4DDNaming(params IMutableEntityType[] entityTypes) { foreach (var entityType in entityTypes) { // Configure column names foreach (var property in entityType.GetProperties()) { var columnName = ToSnakeCase(property.Name); property.SetColumnName(columnName); } } } private static string ToSnakeCase(string input) { if (string.IsNullOrEmpty(input)) { return input; } 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 } }