using EgwCoreLib.Lux.Data.DbModel.Config; using EgwCoreLib.Lux.Data.DbModel.Cost; using EgwCoreLib.Lux.Data.DbModel.Items; using EgwCoreLib.Lux.Data.DbModel.Production; using EgwCoreLib.Lux.Data.DbModel.Sales; using EgwCoreLib.Lux.Data.DbModel.Stock; using EgwCoreLib.Lux.Data.DbModel.Task; using EgwCoreLib.Lux.Data.DbModel.Utils; 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; namespace EgwCoreLib.Lux.Data { public partial class DataLayerContext: DbContext { private static Logger Log = LogManager.GetCurrentClassLogger(); private IConfiguration _configuration; public DataLayerContext() { } public DataLayerContext(IConfiguration configuration) { _configuration = configuration; } public DataLayerContext(DbContextOptions options) : base(options) { try { // se non ci fosse... crea o migra! Database.Migrate(); } catch (Exception exc) { Log.Error(exc, "Exception during context initialization 02"); } } public virtual DbSet DbSetCounters { get; set; } public virtual DbSet DbSetConfGlass { get; set; } public virtual DbSet DbSetConfProfile { get; set; } public virtual DbSet DbSetConfWood { get; set; } public virtual DbSet DbSetEnvirPar { get; set; } public virtual DbSet DbSetItemGroup { get; set; } public virtual DbSet DbSetItem { get; set; } public virtual DbSet DbSetSellItem { get; set; } public virtual DbSet DbSetTags { get; set; } public virtual DbSet DbSetCustomer { get; set; } public virtual DbSet DbSetDealer { get; set; } public virtual DbSet DbSetSupplier { get; set; } public virtual DbSet DbSetOffer { get; set; } public virtual DbSet DbSetOfferRow { get; set; } public virtual DbSet DbSetOrder { get; set; } public virtual DbSet DbSetORDerRow { get; set; } public virtual DbSet DbSetResource { get; set; } public virtual DbSet DbSetPhase { get; set; } public virtual DbSet DbSetJob { get; set; } public virtual DbSet DbSetJobRow { get; set; } public virtual DbSet DbSetJobRowItem { get; set; } public virtual DbSet DbSetProdBatch { get; set; } public virtual DbSet DbSetProdItem { get; set; } public virtual DbSet DbSetProdItemRow { get; set; } public virtual DbSet DbSetStockStatus { get; set; } public virtual DbSet DbSetMovType { get; set; } public virtual DbSet DbSetStockMov { get; set; } public virtual DbSet DbSetGenClass { get; set; } public virtual DbSet DbSetGenVal { get; set; } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // default string connString = DbConfig.CONNECTION_STRING; if (string.IsNullOrEmpty(connString)) { #if DEBUG connString = "Server=mdb.ufficio;port=3306;database=Lux_000;uid=lux_user;pwd=Egal_pwd!;sslmode=None;"; //connString = "Server=mdb.ufficio;port=3306;database=Lux_000_dev;uid=lux_user;pwd=Egal_pwd!;sslmode=None;"; #else connString = "Server=mdb.ufficio;port=3306;database=Lux_000;uid=lux_user;pwd=Egal_pwd!;sslmode=None;"; #endif } if (!optionsBuilder.IsConfigured) { var serverVersion = ServerVersion.AutoDetect(connString); optionsBuilder.UseMySql(connString, serverVersion); // verificare setup componente #if false optionsBuilder .UseMySql(connString, serverVersion) .UseSnakeCaseNamingConvention(); // via EFCore.NamingConventions #endif } } protected override void OnModelCreating(ModelBuilder modelBuilder) { foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) { relationship.DeleteBehavior = DeleteBehavior.Restrict; } // fix chiavi multiple modelBuilder.Entity() .HasKey(c => new { c.RefYear, c.CountName}); modelBuilder.Entity() .HasKey(c => new { c.GlassID }); modelBuilder.Entity() .HasKey(c => new { c.ProfileID }); modelBuilder.Entity() .HasKey(c => new { c.WoodID }); // fix valori timestamp modelBuilder.Entity(entity => { entity.Property(e => e.DtCreate) .HasColumnType("timestamp") .HasDefaultValueSql("CURRENT_TIMESTAMP") .ValueGeneratedOnAdd(); entity.Property(e => e.DtMod) .HasColumnType("timestamp") .HasDefaultValueSql("CURRENT_TIMESTAMP") .ValueGeneratedOnAddOrUpdate(); }); // seed finale dei dati di default modelBuilder.Seed(); OnModelCreatingPartial(modelBuilder); } public void DbForceMigrate() { 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"); } } } }