using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Debug; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using WMS.Web.Domain.Entitys; using WMS.Web.Repositories.Configuration.Log; namespace WMS.Web.Repositories.Configuration { /// /// db上下文 /// public class RepositoryDbContext : DbContext { [Obsolete] public readonly LoggerFactory LoggerFactory = new LoggerFactory(new[] { new DebugLoggerProvider() }); public RepositoryDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { LoggerFactory.AddProvider(new EFCoreLoggerProvider()); base.OnConfiguring(optionsBuilder); optionsBuilder.UseLoggerFactory(LoggerFactory).EnableSensitiveDataLogging(); } protected override void OnModelCreating(ModelBuilder builder) { //改箱 builder.Entity(ent => { ent.ToTable("t_wms_changebox_record"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)); }); //移箱 builder.Entity(ent => { ent.ToTable("t_wms_movebox_record"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); //移箱明细 builder.Entity(ent => { ent.ToTable("t_wms_movebox_record_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)); }); #region 序列号 //序列号 builder.Entity(ent => { ent.ToTable("t_wms_serialnumbers"); ent.HasKey(x => x.Id); }); //序列号 builder.Entity(ent => { ent.ToTable("t_wms_serialnumbers_ops"); ent.HasKey(x => x.Id); }); //序列号操作记录 builder.Entity(ent => { ent.ToTable("t_wms_serialnumberoperate"); ent.HasKey(x => x.Id); }); #endregion //定时任务时间记录表 builder.Entity(ent => { ent.ToTable("t_wms_sync_date"); ent.HasKey(x => x.Id); }); builder.Entity(ent => { ent.ToTable("t_wms_file_down_manager"); ent.HasKey(x => x.Id); }); #region 出库单 builder.Entity(ent => { ent.ToTable("t_wms_outstock"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_outstock_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)); ent.HasMany(p => p.ErpDetails) .WithOne() .HasForeignKey(p => p.DetailId) .OnDelete(DeleteBehavior.Cascade); ent.HasMany(p => p.BoxsDetails) .WithOne() .HasForeignKey(p => p.DetailId) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_outstock_erp_details"); ent.HasKey(x => x.Id); }); builder.Entity(ent => { ent.ToTable("t_wms_outstock_boxs_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)); }); #endregion #region 出库任务单 builder.Entity(ent => { ent.ToTable("t_erp_outstock_task"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_erp_outstock_task_details"); ent.HasKey(x => x.Id); ent.HasMany(p => p.ErpDetails) .WithOne() .HasForeignKey(p => p.DetailId) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_erp_outstock_task_erp_details"); ent.HasKey(x => x.Id); }); #endregion #region 盘点单 builder.Entity(ent => { ent.ToTable("t_wms_takestock"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_takestock_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)); }); #endregion #region 入库单 builder.Entity(ent => { ent.ToTable("t_wms_instock"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); ent.HasMany(p => p.ErpDetails) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_instock_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); ent.Property(f => f.TwoSerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); }); builder.Entity(ent => { ent.ToTable("t_wms_instock_erp_details"); ent.HasKey(x => x.Id); }); builder.Entity(ent => { ent.ToTable("t_wms_instock_total_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); }); # endregion #region 入库任务单 builder.Entity(ent => { ent.ToTable("t_erp_instock_task"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_erp_instock_task_details"); ent.HasKey(x => x.Id); }); builder.Entity(ent => { ent.ToTable("t_erp_instock_task_box"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_erp_instock_task_box_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); }); #endregion #region 出入库回退记录 builder.Entity(ent => { ent.ToTable("t_wms_back_record"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_back_record_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); }); #endregion #region 箱库存 builder.Entity(ent => { ent.ToTable("t_wms_box_inventory"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_wms_box_inventory_details"); ent.HasKey(x => x.Id); ent.Property(f => f.SerialNumbers).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v), new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => (List)c.ToList())); }); # endregion #region 即时库存相关 builder.Entity(ent => { ent.ToTable("t_wms_inventory_details"); ent.HasKey(x => x.Id); }); builder.Entity(ent => { ent.ToTable("t_wms_inventory_inout_details"); ent.HasKey(x => x.Id); }); #endregion #region 箱信息 builder.Entity(ent => { ent.ToTable("t_ops_box"); ent.HasKey(x => x.Id); ent.HasMany(p => p.Details) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); builder.Entity(ent => { ent.ToTable("t_ops_box_details"); ent.HasKey(x => x.Id); }); #endregion //箱唛表 builder.Entity(ent => { ent.ToTable("t_wms_box_mark"); ent.HasKey(x => x.Id); ent.HasMany(p => p.BillNos) .WithOne() .HasForeignKey(p => p.Fid) .OnDelete(DeleteBehavior.Cascade); }); //箱唛表-编号表 builder.Entity(ent => { ent.ToTable("t_wms_box_mark_billno"); ent.HasKey(x => x.Id); }); //物料 builder.Entity(ent => { ent.ToTable("t_wms_materials"); ent.HasKey(x => x.Id); }); //订阅通知 builder.Entity(ent => { ent.ToTable("t_wms_subscribe_notification"); ent.HasKey(x => x.Id); var valueComparer = new ValueComparer>( (c1, c2) => c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => c.ToList()); ent.Property(f => f.Telephones).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)) .Metadata .SetValueComparer(valueComparer); ent.Property(f => f.Emails).HasConversion( v => JsonConvert.SerializeObject(v), v => JsonConvert.DeserializeObject>(v)) .Metadata .SetValueComparer(valueComparer); ; }); //成品即时库存 builder.Entity(ent => { ent.ToTable("t_wms_product_inventory"); ent.HasKey(x => x.Id); }); base.OnModelCreating(builder); } public DbSet ProductInventory { get; set; } public DbSet Materials { get; set; } public DbSet BoxMarkBillNo { get; set; } public DbSet BoxMark { get; set; } public DbSet FileDownManager { get; set; } public DbSet SerialNumbers { get; set; } public DbSet SerialNumbers_Ops { get; set; } public DbSet ErpOpsSyncDate { get; set; } public DbSet SerialNumberOperate { get; set; } public DbSet ChangeBoxRecord { get; set; } public DbSet MoveBoxRecord { get; set; } public DbSet OutStock { get; set; } public DbSet OutStockTask { get; set; } public DbSet TakeStock { get; set; } public DbSet OutStockDetails { get; set; } public DbSet OutStockErpDetails { get; set; } public DbSet OutStockTaskDetails { get; set; } public DbSet OutStockTaskErpDetails { get; set; } public DbSet TakeStockDetails { get; set; } public DbSet Instock { get; set; } public DbSet InStockDetails { get; set; } public DbSet InStockTotalDetails { get; set; } public DbSet InStockTask { get; set; } public DbSet InStockErpDetails { get; set; } public DbSet InstockTaskBox { get; set; } public DbSet InStockTaskBoxDetails { get; set; } public DbSet InStockTaskDetails { get; set; } public DbSet BackRecord { get; set; } public DbSet BackRecordDetails { get; set; } public DbSet BoxInventory { get; set; } public DbSet BoxInventoryDetails { get; set; } public DbSet InventoryDetails { get; set; } public DbSet InventoryInOutDetails { get; set; } public DbSet Box { get; set; } public DbSet BoxDetails { get; set; } public DbSet SubscribeNotification { get; set; } } }