StepPropertyConfiguration.cs 3.36 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Rcs.Domain.Entities;

namespace Rcs.Infrastructure.DB.Configuration.Domain
{
    /// <summary>
    /// StepProperty实体的EF Core配置
    /// </summary>
    public class StepPropertyConfiguration : IEntityTypeConfiguration<StepProperty>
    {
        public void Configure(EntityTypeBuilder<StepProperty> builder)
        {
            // 配置表名
            builder.ToTable("step_properties");

            // 配置主键
            builder.HasKey(e => e.PropertyId);

            // 配置属性
            builder.Property(e => e.PropertyId)
                .HasColumnName("property_id")
                .ValueGeneratedNever();

            builder.Property(e => e.StepId)
                .HasColumnName("step_id")
                .IsRequired();

            builder.Property(e => e.PropertyType)
                .HasColumnName("property_type")
                .IsRequired();

            builder.Property(e => e.NodeValue)
                .HasColumnName("node_value");

            builder.Property(e => e.AfterActionType)
                .HasColumnName("after_action_type");

            builder.Property(e => e.RequestMethod)
                .HasColumnName("request_method")
                .HasMaxLength(10);

            builder.Property(e => e.RequestUrl)
                .HasColumnName("request_url")
                .HasMaxLength(500);

            builder.Property(e => e.RequestParams)
                .HasColumnName("request_params")
                .HasColumnType("text");

            builder.Property(e => e.RepeatCount)
                .HasColumnName("repeat_count");

            builder.Property(e => e.IntervalTimeMs)
                .HasColumnName("interval_time_ms");

            builder.Property(e => e.WaitResponseFlag)
                .HasColumnName("wait_response_flag")
                .HasMaxLength(1);

            builder.Property(e => e.ResponseValidationRule)
                .HasColumnName("response_validation_rule")
                .HasMaxLength(200);

            builder.Property(e => e.Description)
                .HasColumnName("description")
                .HasMaxLength(500);

            builder.Property(e => e.ExtraProperties)
                .HasColumnName("extra_properties")
                .HasColumnType("text");

            builder.Property(e => e.CreatedAt)
                .HasColumnName("created_at")
                .HasColumnType("timestamp without time zone");

            builder.Property(e => e.UpdatedAt)
                .HasColumnName("updated_at")
                .HasColumnType("timestamp without time zone");

            // 配置索引
            builder.HasIndex(e => e.StepId)
                .HasDatabaseName("idx_property_step");

            builder.HasIndex(e => new { e.StepId, e.PropertyType })
                .HasDatabaseName("idx_property_step_type");

            // 配置导航属性 - 多对一关系
            builder.HasOne(e => e.Step)
                .WithMany(s => s.Properties)
                .HasForeignKey(e => e.StepId)
                .OnDelete(DeleteBehavior.Cascade);

            // 配置导航属性 - 一对多关系
            builder.HasMany(e => e.Actions)
                .WithOne(a => a.Property)
                .HasForeignKey(a => a.PropertyId)
                .OnDelete(DeleteBehavior.Cascade);
        }
    }
}