Files
BI/server/DongfangHydro.Dashboard.Api/Data/DashboardDbContext.cs
T

173 lines
9.2 KiB
C#

using DongfangHydro.Dashboard.Api.Domain;
using Microsoft.EntityFrameworkCore;
namespace DongfangHydro.Dashboard.Api.Data;
public sealed class DashboardDbContext(DbContextOptions<DashboardDbContext> options)
: DbContext(options)
{
public DbSet<ProductionOrder> ProductionOrders => Set<ProductionOrder>();
public DbSet<ProductionNode> ProductionNodes => Set<ProductionNode>();
public DbSet<ProductionTrendPoint> ProductionTrendPoints => Set<ProductionTrendPoint>();
public DbSet<RiskEvent> RiskEvents => Set<RiskEvent>();
public DbSet<ProductionLine> ProductionLines => Set<ProductionLine>();
public DbSet<Partner> Partners => Set<Partner>();
public DbSet<MaterialQuota> MaterialQuotas => Set<MaterialQuota>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ProductionOrder>(entity =>
{
entity.ToTable("ProductionOrders");
entity.HasKey(order => order.Id);
entity.HasIndex(order => order.Code);
entity.HasIndex(order => new { order.Status, order.RiskLevel, order.PlannedEnd });
entity.Property(order => order.Code).HasMaxLength(40);
entity.Property(order => order.ProductName).HasMaxLength(200);
entity.Property(order => order.DataSource).HasMaxLength(32);
entity.Property(order => order.SourceDocumentCode).HasMaxLength(80);
entity.Property(order => order.ProjectName).HasMaxLength(200);
entity.Property(order => order.DrawingProductName).HasMaxLength(240);
entity.Property(order => order.SourceFileName).HasMaxLength(260);
entity.Property(order => order.SourceFileHash).HasMaxLength(64);
entity.HasIndex(order => order.SourceDocumentCode)
.IsUnique()
.HasFilter("[SourceDocumentCode] <> ''");
entity.Property(order => order.Status).HasMaxLength(32);
entity.Property(order => order.RiskLevel).HasMaxLength(32);
entity.Property(order => order.LineName).HasMaxLength(80);
entity.Property(order => order.Owner).HasMaxLength(80);
entity.Property(order => order.ThumbnailKey).HasMaxLength(40);
entity.Property(order => order.RowVersion).IsRowVersion();
entity.HasOne<ProductionLine>()
.WithMany()
.HasForeignKey(order => order.LineId)
.OnDelete(DeleteBehavior.SetNull);
});
modelBuilder.Entity<ProductionNode>(entity =>
{
entity.ToTable("ProductionNodes");
entity.HasKey(node => node.Id);
entity.HasIndex(node => new { node.OrderId, node.ParentNodeId, node.SortOrder });
entity.HasIndex(node => new { node.OrderId, node.NodeType, node.RiskLevel, node.Status });
entity.Property(node => node.Code).HasMaxLength(60);
entity.Property(node => node.OperationCode).HasMaxLength(60);
entity.Property(node => node.MaterialCode).HasMaxLength(80);
entity.Property(node => node.Name).HasMaxLength(240);
entity.Property(node => node.SourceSequence).HasMaxLength(40);
entity.Property(node => node.Specification).HasMaxLength(240);
entity.Property(node => node.Material).HasMaxLength(120);
entity.Property(node => node.UnitWeight).HasPrecision(18, 4);
entity.Property(node => node.TotalWeight).HasPrecision(18, 4);
entity.Property(node => node.UnitWeightText).HasMaxLength(80);
entity.Property(node => node.TotalWeightText).HasMaxLength(80);
entity.Property(node => node.BomQuantity).HasPrecision(18, 4);
entity.Property(node => node.BomQuantityText).HasMaxLength(80);
entity.Property(node => node.Remark).HasMaxLength(500);
entity.Property(node => node.SourceSheet).HasMaxLength(40);
entity.Property(node => node.NodeType).HasMaxLength(32);
entity.Property(node => node.SupplyType).HasMaxLength(32);
entity.Property(node => node.Status).HasMaxLength(32);
entity.Property(node => node.RiskLevel).HasMaxLength(32);
entity.Property(node => node.DelayReason).HasMaxLength(500);
entity.Property(node => node.Owner).HasMaxLength(100);
entity.Property(node => node.Vendor).HasMaxLength(120);
entity.Property(node => node.StationName).HasMaxLength(120);
entity.Property(node => node.VisualKey).HasMaxLength(40);
entity.Property(node => node.RowVersion).IsRowVersion();
entity.HasAlternateKey(node => new { node.OrderId, node.Id });
entity.HasOne<ProductionOrder>()
.WithMany()
.HasForeignKey(node => node.OrderId)
.OnDelete(DeleteBehavior.Cascade);
entity.HasOne<ProductionNode>()
.WithMany()
.HasForeignKey(node => new { node.OrderId, node.ParentNodeId })
.HasPrincipalKey(node => new { node.OrderId, node.Id })
.OnDelete(DeleteBehavior.Restrict);
});
modelBuilder.Entity<ProductionTrendPoint>(entity =>
{
entity.ToTable("ProductionTrendPoints");
entity.HasKey(point => point.Id);
entity.HasIndex(point => new { point.OrderId, point.SampleTime }).IsDescending(false, true);
entity.HasOne<ProductionOrder>()
.WithMany()
.HasForeignKey(point => point.OrderId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<RiskEvent>(entity =>
{
entity.ToTable("RiskEvents");
entity.HasKey(riskEvent => riskEvent.Id);
entity.HasIndex(riskEvent => new { riskEvent.OrderId, riskEvent.OccurredAt }).IsDescending(false, true);
entity.Property(riskEvent => riskEvent.OrderCode).HasMaxLength(40);
entity.Property(riskEvent => riskEvent.NodeName).HasMaxLength(240);
entity.Property(riskEvent => riskEvent.RiskLevel).HasMaxLength(32);
entity.Property(riskEvent => riskEvent.Message).HasMaxLength(500);
entity.Property(riskEvent => riskEvent.HandlingStatus).HasMaxLength(32);
entity.HasOne<ProductionOrder>()
.WithMany()
.HasForeignKey(riskEvent => riskEvent.OrderId)
.OnDelete(DeleteBehavior.Cascade);
entity.HasOne<ProductionNode>()
.WithMany()
.HasForeignKey(riskEvent => new { riskEvent.OrderId, riskEvent.NodeId })
.HasPrincipalKey(node => new { node.OrderId, node.Id })
.OnDelete(DeleteBehavior.NoAction);
});
modelBuilder.Entity<MaterialQuota>(entity =>
{
entity.ToTable("MaterialQuotas");
entity.HasKey(item => item.Id);
entity.HasIndex(item => new { item.OrderId, item.SourceSheet, item.SourceRow }).IsUnique();
entity.HasIndex(item => new { item.OrderId, item.Category, item.MaterialCode });
entity.Property(item => item.Category).HasMaxLength(80);
entity.Property(item => item.SourceSequence).HasMaxLength(40);
entity.Property(item => item.MaterialCode).HasMaxLength(80);
entity.Property(item => item.MaterialName).HasMaxLength(240);
entity.Property(item => item.Specification).HasMaxLength(240);
entity.Property(item => item.Unit).HasMaxLength(24);
entity.Property(item => item.Quantity).HasPrecision(18, 4);
entity.Property(item => item.NetWeight).HasPrecision(18, 4);
entity.Property(item => item.ConsumptionQuota).HasPrecision(18, 4);
entity.Property(item => item.QuantityText).HasMaxLength(80);
entity.Property(item => item.NetWeightText).HasMaxLength(80);
entity.Property(item => item.ConsumptionQuotaText).HasMaxLength(80);
entity.Property(item => item.Brand).HasMaxLength(120);
entity.Property(item => item.Remark).HasMaxLength(500);
entity.Property(item => item.SourceSheet).HasMaxLength(40);
entity.HasOne<ProductionOrder>()
.WithMany()
.HasForeignKey(item => item.OrderId)
.OnDelete(DeleteBehavior.Cascade);
});
modelBuilder.Entity<ProductionLine>(entity =>
{
entity.ToTable("ProductionLines");
entity.HasKey(line => line.Id);
entity.HasIndex(line => line.Code).IsUnique();
entity.Property(line => line.Code).HasMaxLength(40);
entity.Property(line => line.Name).HasMaxLength(80);
entity.Property(line => line.Owner).HasMaxLength(80);
});
modelBuilder.Entity<Partner>(entity =>
{
entity.ToTable("Partners");
entity.HasKey(partner => partner.Id);
entity.HasIndex(partner => partner.Code).IsUnique();
entity.Property(partner => partner.Code).HasMaxLength(40);
entity.Property(partner => partner.Name).HasMaxLength(120);
entity.Property(partner => partner.PartnerType).HasMaxLength(32);
entity.Property(partner => partner.ContactName).HasMaxLength(80);
entity.Property(partner => partner.ContactPhone).HasMaxLength(32);
});
}
}