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"); builder.Property(e => e.RxType) .IsRequired() .HasColumnName("rx_type"); builder.Property(e => e.RxPower) .IsRequired() .HasColumnName("rx_power"); builder.Property(e => e.TxPower) .IsRequired() .HasColumnName("tx_power"); builder.Property(e => e.Vcoil) .IsRequired() .HasColumnName("vcoil"); builder.Property(e => e.Vin) .IsRequired() .HasColumnName("vin"); builder.Property(e => e.Isns) .IsRequired() .HasColumnName("isns"); builder.Property(e => e.Ploss) .IsRequired() .HasColumnName("ploss"); builder.Property(e => e.Threshold) .IsRequired() .HasColumnName("threshold"); builder.Property(e => e.TriggerCount) .IsRequired() .HasDefaultValue(0) .HasColumnName("trigger_count"); builder.Property(e => e.FodResult) .IsRequired() .HasDefaultValue(0) .HasColumnName("fod_result"); builder.Property(e => e.ProtocolType) .IsRequired() .HasColumnName("protocol_type"); builder.Property(e => e.PwmDuty) .IsRequired() .HasColumnName("pwm_duty"); builder.Property(e => e.CoilIndex) .IsRequired() .HasColumnName("coil_index"); 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.RxPower).HasDatabaseName("idx_ploss_rx_power"); builder.HasIndex(e => e.Ploss).HasDatabaseName("idx_ploss_ploss"); builder.HasIndex(e => e.Threshold).HasDatabaseName("idx_ploss_threshold"); builder.HasIndex(e => e.FodResult).HasDatabaseName("idx_ploss_fod_result"); // 关系配置 builder.HasOne(e => e.Scenario) .WithMany(e => e.PlossRecords) .HasForeignKey(e => e.ScenarioId) .OnDelete(DeleteBehavior.Cascade); // 全局查询过滤器 builder.HasQueryFilter(e => !e.IsDeleted); } }