2026-07-02 18:13:56 +08:00
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
2026-07-03 10:47:27 +08:00
|
|
|
|
using WCTDataMiner.Core.Models;
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 10:47:27 +08:00
|
|
|
|
namespace WCTDataMiner.Core.Data.Configurations;
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
|
|
|
|
|
public class PlossRecordConfiguration : IEntityTypeConfiguration<PlossRecord>
|
|
|
|
|
|
{
|
|
|
|
|
|
public void Configure(EntityTypeBuilder<PlossRecord> 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");
|
|
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
// ===== 第一行字段(nullable) =====
|
|
|
|
|
|
builder.Property(e => e.PowLoss)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.HasColumnName("pow_loss");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.DeltaP)
|
|
|
|
|
|
.IsRequired(false)
|
|
|
|
|
|
.HasColumnName("delta_p");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
// ===== 第二行字段(通用命名) =====
|
|
|
|
|
|
builder.Property(e => e.Field1)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_1");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field2)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_2");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field3)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_3");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field4)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_4");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field5)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_5");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field6)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_6");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field7)
|
|
|
|
|
|
.IsRequired()
|
|
|
|
|
|
.HasColumnName("field_7");
|
|
|
|
|
|
|
|
|
|
|
|
builder.Property(e => e.Field8)
|
|
|
|
|
|
.IsRequired()
|
|
|
|
|
|
.HasColumnName("field_8");
|
|
|
|
|
|
|
|
|
|
|
|
builder.Property(e => e.Field9)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
|
|
|
|
|
.HasDefaultValue(0)
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_9");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field10)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
|
|
|
|
|
.HasDefaultValue(0)
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_10");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field11)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_11");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field12)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.HasColumnName("field_12");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
2026-07-03 18:06:01 +08:00
|
|
|
|
builder.Property(e => e.Field13)
|
2026-07-02 18:13:56 +08:00
|
|
|
|
.IsRequired()
|
2026-07-03 18:06:01 +08:00
|
|
|
|
.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");
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
|
|
|
|
|
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");
|
2026-07-03 18:06:01 +08:00
|
|
|
|
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"); // 新增
|
2026-07-02 18:13:56 +08:00
|
|
|
|
|
|
|
|
|
|
// 关系配置
|
|
|
|
|
|
builder.HasOne(e => e.Scenario)
|
|
|
|
|
|
.WithMany(e => e.PlossRecords)
|
|
|
|
|
|
.HasForeignKey(e => e.ScenarioId)
|
|
|
|
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
|
|
|
|
|
|
|
|
|
|
// 全局查询过滤器
|
|
|
|
|
|
builder.HasQueryFilter(e => !e.IsDeleted);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|