using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using WCTDataMiner.Core.Models; namespace WCTDataMiner.Core.Data.Configurations; public class PlossRecordConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("ploss_record"); builder.HasKey(e => e.Id); builder.Property(e => e.Id).HasColumnName("id"); builder.Property(e => e.ScenarioId) .IsRequired() .HasColumnName("scenario_id"); // ===== 第一行字段(nullable) ===== builder.Property(e => e.PowLoss) .IsRequired(false) .HasColumnName("pow_loss"); builder.Property(e => e.DeltaP) .IsRequired(false) .HasColumnName("delta_p"); // ===== 第二行字段(通用命名) ===== builder.Property(e => e.Field1) .IsRequired() .HasColumnName("field_1"); builder.Property(e => e.Field2) .IsRequired() .HasColumnName("field_2"); builder.Property(e => e.Field3) .IsRequired() .HasColumnName("field_3"); builder.Property(e => e.Field4) .IsRequired() .HasColumnName("field_4"); builder.Property(e => e.Field5) .IsRequired() .HasColumnName("field_5"); builder.Property(e => e.Field6) .IsRequired() .HasColumnName("field_6"); builder.Property(e => e.Field7) .IsRequired() .HasColumnName("field_7"); builder.Property(e => e.Field8) .IsRequired() .HasColumnName("field_8"); builder.Property(e => e.Field9) .IsRequired() .HasDefaultValue(0) .HasColumnName("field_9"); builder.Property(e => e.Field10) .IsRequired() .HasDefaultValue(0) .HasColumnName("field_10"); builder.Property(e => e.Field11) .IsRequired() .HasColumnName("field_11"); builder.Property(e => e.Field12) .IsRequired() .HasColumnName("field_12"); builder.Property(e => e.Field13) .IsRequired() .HasColumnName("field_13"); builder.Property(e => e.Field14) .IsRequired() .HasDefaultValue(0) .HasColumnName("field_14"); builder.Property(e => e.Field15) .IsRequired() .HasDefaultValue(0) .HasColumnName("field_15"); builder.Property(e => e.Field16) .IsRequired() .HasDefaultValue(0) .HasColumnName("field_16"); builder.Property(e => e.IsDeleted) .IsRequired() .HasDefaultValue(false) .HasColumnName("is_deleted"); builder.Property(e => e.CreatedAt) .IsRequired() .HasDefaultValueSql("datetime('now')") .HasColumnName("created_at"); // 派生属性不落库 builder.Ignore(e => e.Margin); // 索引 builder.HasIndex(e => e.ScenarioId).HasDatabaseName("idx_ploss_scenario"); builder.HasIndex(e => e.Field2).HasDatabaseName("idx_ploss_field_2"); // 原 rx_power builder.HasIndex(e => e.Field7).HasDatabaseName("idx_ploss_field_7"); // 原 ploss builder.HasIndex(e => e.Field8).HasDatabaseName("idx_ploss_field_8"); // 原 threshold builder.HasIndex(e => e.Field10).HasDatabaseName("idx_ploss_field_10"); // 原 fod_result builder.HasIndex(e => e.PowLoss).HasDatabaseName("idx_ploss_pow_loss"); // 新增 builder.HasIndex(e => e.DeltaP).HasDatabaseName("idx_ploss_delta_p"); // 新增 // 关系配置 builder.HasOne(e => e.Scenario) .WithMany(e => e.PlossRecords) .HasForeignKey(e => e.ScenarioId) .OnDelete(DeleteBehavior.Cascade); // 全局查询过滤器 builder.HasQueryFilter(e => !e.IsDeleted); } }