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 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("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 DbSetCompany { get; set; } = null!; public virtual DbSet DbSetDoor { get; set; } = null!; public virtual DbSet DbSetOrders { get; set; } = null!; public virtual DbSet DbSetOrderStatus { get; set; } = null!; public virtual DbSet DbSetRoles { get; set; } = null!; public virtual DbSet DbSetUserRoles { get; set; } = null!; public virtual DbSet DbSetUsers { get; set; } = null!; public virtual DbSet DbSetUsersView { get; set; } = null!; public virtual DbSet DbSetValues { get; set; } = null!; public virtual DbSet DbSetValuesTemp { get; set; } = null!; public virtual DbSet DbSetDoorOpType { get; set; } = null!; public virtual DbSet DbSetDoorOpTypeTemp { get; set; } = null!; public virtual DbSet DbSetDoorOp { get; set; } = null!; public virtual DbSet DbSetHardware { get; set; } = null!; public virtual DbSet DbSetGraphicParams { get; set; } = null!; public virtual DbSet DbSetVocabulary { get; set; } = null!; public virtual DbSet DbSetVocabularyTemp { get; set; } = null!; public virtual DbSet DbSetLanguages { get; set; } = null!; public virtual DbSet DbSetSerializedDoors { get; set; } = null!; public virtual DbSet DbSetConfig { get; set; } = null!; public virtual DbSet DbSetPrtRepOrder { get; set; } = null!; public virtual DbSet 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("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().ToTable(nameof(AspNetUsers), t => t.ExcludeFromMigrations()); modelBuilder.Entity().ToTable(nameof(AspNetRoles), t => t.ExcludeFromMigrations()); modelBuilder.Entity().ToTable(nameof(AspNetUserRoles), t => t.ExcludeFromMigrations()); // Creazione viste migrate modelBuilder.Entity().ToView("v_UserRolesClaims"); modelBuilder.Entity().ToView("v_OrderStatus"); modelBuilder.Entity().ToView("v_PrtReport"); //modelBuilder.Entity().ToView(nameof(OrderStatusViewModel)); modelBuilder.Entity().HasKey(c => new { c.UserId, c.RoleId }); modelBuilder.Entity().HasKey(c => new { c.UserId, c.RoleId, c.ClaimId }); modelBuilder.Entity().HasKey(c => new { c.TableName, c.FieldName, c.Value }); modelBuilder.Entity().HasKey(c => new { c.TableName, c.FieldName, c.Value }); modelBuilder.Entity().HasKey(c => new { c.Lingua, c.Lemma }); modelBuilder.Entity().HasKey(c => new { c.Lingua, c.Lemma }); // gestione onCascade DoorOp <--> parent //modelBuilder.Entity().HasOne(e => e.ParentNav).WithOne().OnDelete(DeleteBehavior.NoAction); // verifico SE devo eseguire la migration del DB IDENT... bool disableMigrate = false; if (_configuration != null && _configuration.GetValue("SetupOpt:DisableWDCMigrate") != null) { try { _configuration.GetValue("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().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 } }