MapFileConfiguration.cs 2.81 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Rcs.Domain.Entities;

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

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

            // 配置属性
            builder.Property(e => e.Id)
                .HasColumnName("id")
                .HasMaxLength(36)
                .ValueGeneratedNever();

            builder.Property(e => e.FileName)
                .HasColumnName("file_name")
                .HasMaxLength(255)
                .IsRequired();

            builder.Property(e => e.FileSize)
                .HasColumnName("file_size")
                .IsRequired();

            builder.Property(e => e.FilePath)
                .HasColumnName("file_path")
                .HasMaxLength(512)
                .IsRequired();

            builder.Property(e => e.Opacity)
                .HasColumnName("opacity")
                .HasColumnType("decimal(3,2)")
                .HasDefaultValue(0.60m);

            builder.Property(e => e.Scale)
                .HasColumnName("scale")
                .HasColumnType("decimal(10,2)")
                .HasDefaultValue(1.00m);

            builder.Property(e => e.UploadTime)
                .HasColumnName("upload_time")
                .HasColumnType("timestamp without time zone")
                .HasDefaultValueSql("CURRENT_TIMESTAMP")
                .IsRequired();

            builder.Property(e => e.OffsetX)
                .HasColumnName("offset_x")
                .HasColumnType("decimal(10,2)")
                .HasDefaultValue(0.00m);

            builder.Property(e => e.OffsetY)
                .HasColumnName("offset_y")
                .HasColumnType("decimal(10,2)")
                .HasDefaultValue(0.00m);

            builder.Property(e => e.MapId)
                .HasColumnName("map_id")
                .IsRequired();

            builder.Property(e => e.Active)
                .HasColumnName("active")
                .HasDefaultValue(true);

            // 配置索引
            builder.HasIndex(e => e.MapId)
                .HasDatabaseName("idx_map_files_map_id")
                .IsUnique();

            builder.HasIndex(e => e.UploadTime)
                .HasDatabaseName("idx_map_files_upload_time");

            // 配置导航属性 - 一对一关系
            builder.HasOne(e => e.Map)
                .WithOne(m => m.MapFile)
                .HasForeignKey<MapFile>(e => e.MapId)
                .OnDelete(DeleteBehavior.Cascade);
        }
    }
}