using ApiPolo.Interfaces; using ApiPolo.Models; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; namespace ApiPolo.Data { public class TenantDbContext : DbContext,ITenantDbContext { private readonly string _connectionString; private readonly string _tenantCode; #region PROPERTIES public DbSet? Causali { get; set; } public DbSet? Chiusure { get; set; } public DbSet? Azi { get; set; } public DbSet? ccci { get; set; } public DbSet? ccciWiev { get; set; } public DbSet? Chiamate { get; set; } public DbSet? Clienti { get; set; } public DbSet? Componen { get; set; } // IN CONFLITTO CON Compo_Impia //public DbSet? Componen { get; set; } //CAMBIARE NOME!!! public DbSet? Impia { get; set; } public DbSet? Mag { get; set; } public DbSet? Magaz { get; set; } public DbSet? Manutenzioni { get; set; } public DbSet? Pagamenti { get; set; } public DbSet? Prese { get; set; } public DbSet? Rapps { get; set; } public DbSet? rapp { get; set; } public DbSet? Sost { get; set; } public DbSet? Saldi { get; set; } public DbSet? StoRapp { get; set; } public DbSet? Tecnici { get; set; } public DbSet? StoImp { get; set; } public DbSet? Timbr { get; set; } public DbSet? Commesse { get; set; } public DbSet? Prog { get; set; } //public DbSet? Progressivi { get; set; } public DbSet? Compo { get; set; } public DbSet? ChiamateTables { get; set; } public DbSet? Buoni { get; set; } #endregion public TenantDbContext(DbContextOptions options, IConfiguration configuration, string tenant) : base(options) { // Fetch the connection string dynamically based on tenant _tenantCode = tenant; _connectionString = configuration.GetConnectionString(tenant) ?? throw new KeyNotFoundException($"No connection string found for tenant: {tenant}"); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseSqlServer(_connectionString); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { void TryConfigureEntity(Action configure, string entityName) { try { configure(modelBuilder); } catch (Exception ex) { Console.WriteLine($"Warning: Skipping entity '{entityName}' due to error: {ex.Message}"); } } TryConfigureEntity(mb => mb.Entity().ToView("API_CAUS_RAPP"), "API_CAUS_RAPP"); TryConfigureEntity(mb => mb.Entity().ToView("API_CHIUSURE"), "API_CHIUSURE"); TryConfigureEntity(mb => { mb.Entity().ToTable("PIAZIRIF"); mb.Entity().HasKey(table => new { table.piazihoc, table.picodtec, table.pirifazi }); }, "PIAZIRIF"); TryConfigureEntity(mb => { mb.Entity().ToTable("PIASSCHIU"); mb.Entity().HasKey(table => new { table.picodazi, table.picodint, table.picodchi }); }, "PIASSCHIU"); TryConfigureEntity(mb => mb.Entity().ToView("API_ASSCHIU"), "API_ASSCHIU"); TryConfigureEntity(mb => mb.Entity().ToView("API_CHIAMATE"), "API_CHIAMATE"); TryConfigureEntity(mb => mb.Entity().ToView("API_CLIENTI"), "API_CLIENTI"); TryConfigureEntity(mb => { mb.Entity().ToTable($"{_tenantCode}MICOMIMP"); mb.Entity().HasKey(table => new { table.cocodimp, table.cprownum, table.cocodazi }); }, $"{_tenantCode}MICOMIMP"); TryConfigureEntity(mb => mb.Entity().ToView("API_MICOMIMP"), "API_MICOMIMP"); TryConfigureEntity(mb => mb.Entity().ToView("API_IMPIANTI"), "API_IMPIANTI"); TryConfigureEntity(mb => { mb.Entity().ToTable($"{_tenantCode}MAG_NEW"); mb.Entity().HasKey(table => new { table.seriale_rapportino, table.riga }); }, $"{_tenantCode}MAG_NEW"); TryConfigureEntity(mb =>mb.Entity().ToTable($"{_tenantCode}MAGAZZIN"), $"{_tenantCode}MAGAZZIN"); TryConfigureEntity(mb => mb.Entity().ToView("API_MANPROG"), "API_MANPROG"); TryConfigureEntity(mb => mb.Entity().ToView("API_PAGAMENTI"), "API_PAGAMENTI"); TryConfigureEntity(mb => { mb.Entity().ToTable("PIPRESA"); mb.Entity().HasKey(table => new { table.picodazi, table.pimpianto, table.picodint, table.pidatman }); }, "PIPRESA"); TryConfigureEntity(mb => mb.Entity().ToTable("RAPP_NEW"), "RAPP_NEW"); TryConfigureEntity(mb => mb.Entity().ToView("API_RAPPORTINI"), "API_RAPPORTINI"); TryConfigureEntity(mb => mb.Entity().ToView("API_SALDIART_PREZZI"), "API_SALDIART_PREZZI"); TryConfigureEntity(mb => mb.Entity().ToView("API_SOSTITUZIONI"), "API_SOSTITUZIONI"); TryConfigureEntity(mb => mb.Entity().ToView("API_STO_RAPP"), "API_STO_RAPP"); TryConfigureEntity(mb => mb.Entity().ToView("API_TECNICI"), "API_TECNICI"); TryConfigureEntity(mb => mb.Entity().ToTable("TIMBRATURE"), "TIMBRATURE"); TryConfigureEntity(mb => mb.Entity().ToView("API_COMMESSE"), "API_COMMESSE"); TryConfigureEntity(mb => mb.Entity().ToView("API_STO_IMP"), "API_STO_IMP"); TryConfigureEntity(mb => { mb.Entity().ToTable("CPWARN"); mb.Entity().HasKey(table => new { table.tablecode, table.warncode }); }, "CPWARN"); TryConfigureEntity(mb => { mb.Entity().ToTable("CHIAMATE"); mb.Entity().HasKey(table => new { table.chcodazi, table.chserial }); }, "CHIAMATE"); TryConfigureEntity(mb => { mb.Entity().ToTable("BUONI"); mb.Entity().HasKey(table => new { table.azienda, table.ser_buono }); }, "BUONI"); } } }