using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Gpulse.WCT.DataAnalyzer.Core.Domain.Local; namespace Gpulse.WCT.DataAnalyzer.Core.Infrastructure.LocalData.Configurations; public class TestScenarioConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("test_scenario"); builder.HasKey(e => e.Id); builder.Property(e => e.Id).HasColumnName("id"); builder.Property(e => e.TxPanelId) .IsRequired() .HasColumnName("tx_panel_id"); builder.Property(e => e.TxHardwareId) .IsRequired() .HasColumnName("tx_hardware_id"); builder.Property(e => e.TxSoftwareId) .IsRequired() .HasColumnName("tx_software_id"); builder.Property(e => e.RxTypeId) .IsRequired() .HasColumnName("rx_type_id"); builder.Property(e => e.TestPurpose) .HasMaxLength(200) .HasColumnName("test_purpose"); builder.Property(e => e.TestDate) .IsRequired() .HasColumnName("test_date"); builder.Property(e => e.TestSequence) .IsRequired() .HasDefaultValue(1) .HasColumnName("test_sequence"); builder.Property(e => e.QfodCount) .IsRequired() .HasDefaultValue(0) .HasColumnName("qfod_count"); builder.Property(e => e.PlossCount) .IsRequired() .HasDefaultValue(0) .HasColumnName("ploss_count"); builder.Property(e => e.IsDeleted) .IsRequired() .HasDefaultValue(false) .HasColumnName("is_deleted"); builder.Property(e => e.CreatedAt) .IsRequired() .HasDefaultValueSql("datetime('now')") .HasColumnName("created_at"); // 索引 builder.HasIndex(e => e.TxPanelId).HasDatabaseName("idx_scenario_tx_panel"); builder.HasIndex(e => e.TxHardwareId).HasDatabaseName("idx_scenario_tx_hardware"); builder.HasIndex(e => e.TxSoftwareId).HasDatabaseName("idx_scenario_tx_software"); builder.HasIndex(e => e.RxTypeId).HasDatabaseName("idx_scenario_rx_type"); builder.HasIndex(e => e.TestDate).HasDatabaseName("idx_scenario_test_date"); // 唯一约束 builder.HasIndex(e => new { e.TxPanelId, e.TxHardwareId, e.TxSoftwareId, e.RxTypeId, e.TestPurpose, e.TestDate, e.TestSequence }) .IsUnique() .HasDatabaseName("uq_scenario"); // 关系配置 - 维度表 builder.HasOne(e => e.TxPanel) .WithMany(e => e.TestScenarios) .HasForeignKey(e => e.TxPanelId) .OnDelete(DeleteBehavior.Restrict); builder.HasOne(e => e.TxHardware) .WithMany(e => e.TestScenarios) .HasForeignKey(e => e.TxHardwareId) .OnDelete(DeleteBehavior.Restrict); builder.HasOne(e => e.TxSoftware) .WithMany(e => e.TestScenarios) .HasForeignKey(e => e.TxSoftwareId) .OnDelete(DeleteBehavior.Restrict); builder.HasOne(e => e.RxType) .WithMany(e => e.TestScenarios) .HasForeignKey(e => e.RxTypeId) .OnDelete(DeleteBehavior.Restrict); // 关系配置 - 数据记录 builder.HasMany(e => e.QfodRecords) .WithOne(e => e.Scenario) .HasForeignKey(e => e.ScenarioId) .OnDelete(DeleteBehavior.Cascade); builder.HasMany(e => e.PlossRecords) .WithOne(e => e.Scenario) .HasForeignKey(e => e.ScenarioId) .OnDelete(DeleteBehavior.Cascade); // 全局查询过滤器 builder.HasQueryFilter(e => !e.IsDeleted); } }