using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using CoreAgent.ProtocolClient.Enums; namespace CoreAgent.ProtocolClient.Models { /// /// 协议日志详情实体 /// 用于存储解析后的协议日志详细信息到数据库 /// [Table("ProtocolLogDetails")] public class ProtocolLogDetail { /// /// 主键ID /// [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } /// /// 协议层类型 /// [Required] [Column("LayerType")] public ProtocolLayer LayerType { get; set; } /// /// 消息详情集合(JSON格式存储) /// [Column("MessageDetail", TypeName = "TEXT")] public string? MessageDetailJson { get; set; } /// /// 小区ID /// [Column("CellID")] public int? CellID { get; set; } /// /// 国际移动用户识别码 /// [Column("IMSI", TypeName = "VARCHAR(20)")] [MaxLength(20)] public string? IMSI { get; set; } /// /// 日志方向类型 /// [Required] [Column("Direction")] public int Direction { get; set; } /// /// 用户设备ID /// [Column("UEID")] public int? UEID { get; set; } /// /// 公共陆地移动网络标识 /// [Column("PLMN", TypeName = "VARCHAR(10)")] [MaxLength(10)] public string? PLMN { get; set; } /// /// 时间间隔(毫秒) /// [Column("TimeMs")] public long TimeMs { get; set; } /// /// 时间戳 /// [Required] [Column("Timestamp")] public long Timestamp { get; set; } /// /// 信息字段 /// [Column("Info", TypeName = "TEXT")] public string? Info { get; set; } /// /// 消息字段 /// [Column("Message", TypeName = "TEXT")] public string? Message { get; set; } /// /// 消息详情集合(非数据库字段,用于业务逻辑) /// [NotMapped] public IEnumerable? MessageDetail { get => !string.IsNullOrEmpty(MessageDetailJson) ? Newtonsoft.Json.JsonConvert.DeserializeObject>(MessageDetailJson) : null; set => MessageDetailJson = value != null ? Newtonsoft.Json.JsonConvert.SerializeObject(value) : null; } /// /// 时间间隔(用于业务逻辑) /// [NotMapped] public TimeSpan Time { get => TimeSpan.FromMilliseconds(TimeMs); set => TimeMs = (long)value.TotalMilliseconds; } } }