TaskTemplateConfiguration.cs 2.88 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Rcs.Domain.Entities;

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

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

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

            builder.Property(e => e.TemplateCode)
                .HasColumnName("template_code")
                .HasMaxLength(50)
                .IsRequired();

            builder.Property(e => e.TemplateName)
                .HasColumnName("template_name")
                .HasMaxLength(100)
                .IsRequired();

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

            builder.Property(e => e.RobotType)
                .HasColumnName("robot_type")
                .IsRequired();

            builder.Property(e => e.Manufacturer)
                .HasColumnName("manufacturer")
                .HasMaxLength(100);

            builder.Property(e => e.IsEnabled)
                .HasColumnName("is_enabled")
                .HasDefaultValue(true);

            // 是否为默认模板 @author zzy
            builder.Property(e => e.IsDefault)
                .HasColumnName("is_default")
                .HasDefaultValue(false);

            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.TemplateCode)
                .HasDatabaseName("idx_template_code")
                .IsUnique();

            builder.HasIndex(e => e.RobotType)
                .HasDatabaseName("idx_template_robot_type");

            builder.HasIndex(e => e.IsEnabled)
                .HasDatabaseName("idx_template_enabled");

            // 复合索引:用于默认模板唯一性约束查询 @author zzy
            builder.HasIndex(e => new { e.RobotType, e.Manufacturer, e.IsDefault })
                .HasDatabaseName("idx_template_default");

            // 配置导航属性 - 一对多关系
            builder.HasMany(e => e.TaskSteps)
                .WithOne(s => s.Template)
                .HasForeignKey(s => s.TemplateId)
                .OnDelete(DeleteBehavior.Cascade);
        }
    }
}