211 lines
8.6 KiB
C#
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
|
|
}
|
|
}
|