You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
2.1 KiB

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using CellularManagement.Domain.Entities.Device;
namespace CellularManagement.Infrastructure.Configurations.Device;
public class CellularDeviceConfiguration : IEntityTypeConfiguration<CellularDevice>
{
public void Configure(EntityTypeBuilder<CellularDevice> 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);
}
}