EquipmentPropConfiguration.cs 3.39 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using HaHRCS.Rcs.Model.Entities;

namespace Rcs.Infrastructure.DB.Configuration.Domain
{
    /// <summary>
    /// 设备属性 EF Core 配置
    /// </summary>
    public class EquipmentPropConfiguration : IEntityTypeConfiguration<EquipmentProp>
    {
        public void Configure(EntityTypeBuilder<EquipmentProp> builder)
        {
            // 表名
            builder.ToTable("base_equipment_prop");

            // 主键
            builder.HasKey(e => e.Id);

            // ==================== 主键字段 ====================
            builder.Property(e => e.Id)
                .HasColumnName("Id")
                .ValueGeneratedOnAdd(); // 自增

            // ==================== 创建/更新信息 ====================
            builder.Property(e => e.CreateTime)
                .HasColumnName("CreateTime");

            builder.Property(e => e.CreateBy)
                .HasColumnName("CreateBy")
                .HasMaxLength(20);

            builder.Property(e => e.UpdateTime)
                .HasColumnName("UpdateTime");

            builder.Property(e => e.UpdateBy)
                .HasColumnName("UpdateBy")
                .HasMaxLength(20);

            // ==================== 外键关联字段 ====================
            builder.Property(e => e.EquipmentId)
                .HasColumnName("EquipmentId")
                .IsRequired();

            builder.Property(e => e.EquipmentTypePropTemplateId)
                .HasColumnName("equipmentTypeTemplateId")
                .IsRequired();

            builder.Property(e => e.EquipmentTypePropTemplateCode)
                .HasColumnName("equipmentTypeTemplateCode")
                .HasMaxLength(50)
                .IsRequired();

            // ==================== 业务属性 ====================
            builder.Property(e => e.Address)
                .HasColumnName("Address")
                .HasMaxLength(50);

            builder.Property(e => e.Value)
                .HasColumnName("Value")
                .HasMaxLength(50);

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

            builder.Property(e => e.ServerHandle)
                .HasColumnName("ServerHandle");

            // ==================== 索引 ====================
            builder.HasIndex(e => e.EquipmentId)
                .HasDatabaseName("idx_equipment_prop_equipment_id");

            builder.HasIndex(e => e.EquipmentTypePropTemplateId)
                .HasDatabaseName("idx_equipment_prop_template_id");

            builder.HasIndex(e => e.EquipmentTypePropTemplateCode)
                .HasDatabaseName("idx_equipment_prop_template_code");

            // ==================== 外键关系 ====================
            // 设备属性 → 所属设备 (多对一)
            builder.HasOne(e => e.Equipment)
                .WithMany(p => p.EquipmentProps)
                .HasForeignKey(e => e.EquipmentId)
                .OnDelete(DeleteBehavior.Cascade); // 删除设备时级联删除属性

            // 设备属性 → 所属属性模板 (多对一)
            builder.HasOne(e => e.EquipmentTypePropTemplate)
                .WithMany()
                .HasForeignKey(e => e.EquipmentTypePropTemplateId)
                .OnDelete(DeleteBehavior.Restrict);
        }
    }
}