2026-07-02 18:13:56 +08:00
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
2026-08-13 15:00:39 +08:00
|
|
|
using Gpulse.WCT.DataAnalyzer.Core.Domain.Local;
|
2026-07-02 18:13:56 +08:00
|
|
|
|
2026-08-13 15:00:39 +08:00
|
|
|
namespace Gpulse.WCT.DataAnalyzer.Core.Infrastructure.LocalData.Configurations;
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
|
|
|
public class TestScenarioConfiguration : IEntityTypeConfiguration<TestScenario>
|
|
|
|
|
{
|
|
|
|
|
public void Configure(EntityTypeBuilder<TestScenario> 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);
|
|
|
|
|
}
|
|
|
|
|
}
|