Files
2024-02-16 15:50:13 +01:00

211 lines
8.6 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebDoorCreator.Data.DbModels;
using static Org.BouncyCastle.Math.EC.ECCurve;
namespace WebDoorCreator.Data
{
public partial class WDCDataContext : DbContext
{
#region Public Constructors
public WDCDataContext(IConfiguration configuration)
{
Log.Trace("WDCDataContext starting 01A");
_configuration = configuration;
try
{
// se non ci fosse... crea o migra!
Database.Migrate();
}
catch (Exception exc)
{
Log.Error(exc, "Exception during context initialization 02");
}
}
public WDCDataContext(DbContextOptions<WDCDataContext> options, IConfiguration configuration) : base(options)
{
Log.Trace("WDCDataContext starting 01B");
_configuration = configuration;
// verifico SE devo eseguire la migration del DB IDENT...
bool disableMigrate = _configuration.GetValue<bool>("SetupOpt:DisableWDCMigrate");
if (!disableMigrate)
{
try
{
// se non ci fosse... crea o migra!
Database.Migrate();
}
catch (Exception exc)
{
Log.Error(exc, "Exception during context initialization 02");
}
}
}
#endregion Public Constructors
#region Public Properties
public virtual DbSet<CompanyModel> DbSetCompany { get; set; } = null!;
public virtual DbSet<DoorModel> DbSetDoor { get; set; } = null!;
public virtual DbSet<OrderModel> DbSetOrders { get; set; } = null!;
public virtual DbSet<OrderStatusViewModel> DbSetOrderStatus { get; set; } = null!;
public virtual DbSet<AspNetRoles> DbSetRoles { get; set; } = null!;
public virtual DbSet<AspNetUserRoles> DbSetUserRoles { get; set; } = null!;
public virtual DbSet<AspNetUsers> DbSetUsers { get; set; } = null!;
public virtual DbSet<UsersViewModel> DbSetUsersView { get; set; } = null!;
public virtual DbSet<ListValuesModel> DbSetValues { get; set; } = null!;
public virtual DbSet<ListValuesTempModel> DbSetValuesTemp { get; set; } = null!;
public virtual DbSet<DoorOpTypeModel> DbSetDoorOpType { get; set; } = null!;
public virtual DbSet<DoorOpTypeTempModel> DbSetDoorOpTypeTemp { get; set; } = null!;
public virtual DbSet<DoorOpModel> DbSetDoorOp { get; set; } = null!;
public virtual DbSet<HardwareModel> DbSetHardware { get; set; } = null!;
public virtual DbSet<GraphicParamsModel> DbSetGraphicParams { get; set; } = null!;
public virtual DbSet<VocabularyModel> DbSetVocabulary { get; set; } = null!;
public virtual DbSet<VocabularyTempModel> DbSetVocabularyTemp { get; set; } = null!;
public virtual DbSet<LanguageModel> DbSetLanguages { get; set; } = null!;
public virtual DbSet<SerializedDoorsModel> DbSetSerializedDoors { get; set; } = null!;
public virtual DbSet<ConfigModel> DbSetConfig { get; set; } = null!;
public virtual DbSet<PrtRepOrderModel> DbSetPrtRepOrder { get; set; } = null!;
public virtual DbSet<IdentityTableSeedTest> DbSetIdentityTableSeedTest { get; set; } = null!;
#endregion Public Properties
#region Public Methods
public void DbForceMigrate()
{
// verifico SE devo eseguire la migration del DB IDENT...
bool disableMigrate = _configuration.GetValue<bool>("SetupOpt:DisableWDCMigrate");
if (!disableMigrate)
{
try
{
// se non ci fosse... crea o migra!
Database.Migrate();
Log.Info("DbForceMigrate: done!");
}
catch (Exception exc)
{
Log.Error(exc, "DbForceMigrate: Exception during context initialization 01");
}
}
}
#endregion Public Methods
#region Protected Methods
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
Log.Trace("WDCDataContext starting 02");
if (!optionsBuilder.IsConfigured)
{
string connString = _configuration.GetConnectionString("WDC.DB");
if (!string.IsNullOrEmpty(connString))
{
optionsBuilder.UseSqlServer(connString);
// hierarchId eliminato
//optionsBuilder.UseSqlServer(connString, e => e.UseHierarchyId());
}
else
{
#if false
// dev
//optionsBuilder.UseSqlServer("Server=SQL2016DEV;Database=WebDoorCreator;Trusted_Connection=True;", e => e.UseHierarchyId());
//optionsBuilder.UseSqlServer("Server=SQL2016DEV;Database=WebDoorCreator;Trusted_Connection=True;", e => e.UseHierarchyId());
#endif
// hierarchId eliminato
optionsBuilder.UseSqlServer("Server=SQL2016DEV;Database=WebDoorCreator;Trusted_Connection=True;");
}
Log.Trace("WDCDataContext starting 03");
}
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.UseCollation("Latin1_General_CI_AS");
//Excluding user tables since they are already generated by identity
modelBuilder.Entity<AspNetUsers>().ToTable(nameof(AspNetUsers), t => t.ExcludeFromMigrations());
modelBuilder.Entity<AspNetRoles>().ToTable(nameof(AspNetRoles), t => t.ExcludeFromMigrations());
modelBuilder.Entity<AspNetUserRoles>().ToTable(nameof(AspNetUserRoles), t => t.ExcludeFromMigrations());
// Creazione viste migrate
modelBuilder.Entity<UsersViewModel>().ToView("v_UserRolesClaims");
modelBuilder.Entity<OrderStatusViewModel>().ToView("v_OrderStatus");
modelBuilder.Entity<PrtRepOrderModel>().ToView("v_PrtReport");
//modelBuilder.Entity<OrderStatusViewModel>().ToView(nameof(OrderStatusViewModel));
modelBuilder.Entity<AspNetUserRoles>().HasKey(c => new { c.UserId, c.RoleId });
modelBuilder.Entity<UsersViewModel>().HasKey(c => new { c.UserId, c.RoleId, c.ClaimId });
modelBuilder.Entity<ListValuesModel>().HasKey(c => new { c.TableName, c.FieldName, c.Value });
modelBuilder.Entity<ListValuesTempModel>().HasKey(c => new { c.TableName, c.FieldName, c.Value });
modelBuilder.Entity<VocabularyModel>().HasKey(c => new { c.Lingua, c.Lemma });
modelBuilder.Entity<VocabularyTempModel>().HasKey(c => new { c.Lingua, c.Lemma });
// gestione onCascade DoorOp <--> parent
//modelBuilder.Entity<DoorOpTypeModel>().HasOne<DoorOpModel>(e => e.ParentNav).WithOne().OnDelete(DeleteBehavior.NoAction);
// verifico SE devo eseguire la migration del DB IDENT...
bool disableMigrate = false;
if (_configuration != null && _configuration.GetValue<string>("SetupOpt:DisableWDCMigrate") != null)
{
try
{
_configuration.GetValue<bool>("SetupOpt:DisableWDCMigrate");
}
catch
{ }
}
if (!disableMigrate)
{
modelBuilder.ApplyConfiguration(new ListValuesConfiguration());
modelBuilder.ApplyConfiguration(new LanguageConfiguration());
}
//this.Database.ExecuteSqlRaw("SET IDENTITY_INSERT [dbo].[TestTable] ON");
//modelBuilder.ApplyConfiguration(new TestConfiguration());
//this.Database.ExecuteSqlRaw("SET IDENTITY_INSERT [dbo].[TestTable] OFF");
// modello dati x report ordini
modelBuilder.Entity<PrtRepOrderModel>().HasKey(c => new { c.OrderId, c.DoorId, c.ObjectKey });
modelBuilder.Seed();
OnModelCreatingPartial(modelBuilder);
}
#endregion Protected Methods
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private IConfiguration _configuration;
#endregion Private Fields
#region Private Methods
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
#endregion Private Methods
}
}