using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using CellularManagement.Domain.Entities.Device; namespace CellularManagement.Infrastructure.Configurations.Device; public class CellularDeviceConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("CellularDevices", t => t.HasComment("蜂窝设备表")); builder.HasKey(d => d.Id); // 配置索引 builder.HasIndex(d => d.SerialNumber).IsUnique().HasDatabaseName("IX_CellularDevices_SerialNumber"); builder.HasIndex(d => d.DeviceCode).IsUnique().HasDatabaseName("IX_CellularDevices_DeviceCode"); // 配置属性 builder.Property(d => d.Id).HasComment("设备ID"); builder.Property(d => d.Name).IsRequired().HasMaxLength(100).HasComment("设备名称"); builder.Property(d => d.SerialNumber).IsRequired().HasMaxLength(50).HasComment("序列号"); builder.Property(d => d.DeviceCode).IsRequired().HasMaxLength(50).HasComment("设备编码"); builder.Property(d => d.Description).HasMaxLength(500).HasComment("设备描述"); builder.Property(d => d.AgentPort).IsRequired().HasComment("Agent端口"); builder.Property(d => d.IpAddress).IsRequired().HasMaxLength(45).HasComment("IP地址"); builder.Property(d => d.IsEnabled).IsRequired().HasComment("是否启用"); builder.Property(d => d.IsRunning).IsRequired().HasComment("设备状态(启动/未启动)"); builder.Property(d => d.CreatedAt).IsRequired().HasColumnType("timestamp with time zone").HasComment("创建时间"); builder.Property(d => d.UpdatedAt).IsRequired().HasColumnType("timestamp with time zone").HasComment("更新时间"); // 配置一对多关系:一个设备可以有多个协议版本 builder.HasMany(d => d.ProtocolVersions) .WithOne() .HasForeignKey(pv => pv.SerialNumber) .HasPrincipalKey(d => d.SerialNumber) .OnDelete(DeleteBehavior.Cascade); } }