ActionParameterDefinitionConfiguration.cs 3.12 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Rcs.Domain.Entities;

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

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

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

            builder.Property(e => e.ActionConfigId)
                .HasColumnName("action_config_id")
                .IsRequired();

            builder.Property(e => e.ParameterName)
                .HasColumnName("parameter_name")
                .HasMaxLength(100)
                .IsRequired();

            builder.Property(e => e.ParameterValueType)
                .HasColumnName("parameter_value_type")
                .IsRequired();

            builder.Property(e => e.ParameterDescription)
                .HasColumnName("parameter_description")
                .HasMaxLength(500);

            builder.Property(e => e.IsMandatory)
                .HasColumnName("is_mandatory")
                .HasDefaultValue(false);

            builder.Property(e => e.DefaultValue)
                .HasColumnName("default_value")
                .HasMaxLength(500);

            builder.Property(e => e.ParameterSourceType)
                .HasColumnName("parameter_source_type");

            builder.Property(e => e.ParameterSourcePath)
                .HasColumnName("parameter_source_path")
                .HasMaxLength(500);

            builder.Property(e => e.ValueConstraints)
                .HasColumnName("value_constraints")
                .HasMaxLength(1000);

            builder.Property(e => e.Remarks)
                .HasColumnName("remarks")
                .HasMaxLength(1000);

            builder.Property(e => e.SortOrder)
                .HasColumnName("sort_order")
                .HasDefaultValue(0);

            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.ActionConfigId)
                .HasDatabaseName("idx_param_action_config");

            builder.HasIndex(e => new { e.ActionConfigId, e.ParameterName })
                .HasDatabaseName("idx_param_action_name");

            // 配置导航属性 - 多对一关系
            builder.HasOne(e => e.ActionConfiguration)
                .WithMany(a => a.Parameters)
                .HasForeignKey(e => e.ActionConfigId)
                .OnDelete(DeleteBehavior.Cascade);
        }
    }
}