// using System; using CellularManagement.Infrastructure.Context; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace X1.Infrastructure.Migrations { [DbContext(typeof(AppDbContext))] partial class AppDbContextModelSnapshot : ModelSnapshot { protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "8.0.0") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); modelBuilder.Entity("CellularManagement.Domain.Entities.AppRole", b => { b.Property("Id") .HasColumnType("text") .HasComment("角色ID,主键"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("text") .HasComment("并发控制戳"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasComment("创建时间"); b.Property("Description") .HasMaxLength(500) .HasColumnType("character varying(500)") .HasComment("角色描述"); b.Property("Name") .IsRequired() .HasMaxLength(256) .HasColumnType("character varying(256)") .HasComment("角色名称"); b.Property("NormalizedName") .IsRequired() .HasMaxLength(256) .HasColumnType("character varying(256)") .HasComment("标准化角色名称(大写)"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone") .HasComment("更新时间"); b.HasKey("Id"); b.HasIndex("Name") .IsUnique() .HasDatabaseName("IX_Roles_Name"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex"); b.ToTable("Roles", null, t => { t.HasComment("角色表"); }); }); modelBuilder.Entity("CellularManagement.Domain.Entities.AppUser", b => { b.Property("Id") .HasColumnType("text") .HasComment("用户ID,主键"); b.Property("AccessFailedCount") .HasColumnType("integer") .HasComment("登录失败次数"); b.Property("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("text") .HasComment("并发控制戳"); b.Property("CreatedTime") .HasColumnType("timestamp with time zone") .HasComment("创建时间"); b.Property("Email") .IsRequired() .HasMaxLength(256) .HasColumnType("character varying(256)") .HasComment("电子邮箱"); b.Property("EmailConfirmed") .HasColumnType("boolean") .HasComment("邮箱是否已验证"); b.Property("IsActive") .ValueGeneratedOnAdd() .HasColumnType("boolean") .HasDefaultValue(true) .HasComment("用户状态(true: 启用, false: 禁用)"); b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("boolean") .HasDefaultValue(false) .HasComment("是否已删除"); b.Property("LastLoginTime") .HasColumnType("timestamp with time zone") .HasComment("最后登录时间"); b.Property("LockoutEnabled") .HasColumnType("boolean") .HasComment("是否启用账户锁定"); b.Property("LockoutEnd") .HasColumnType("timestamp with time zone") .HasComment("账户锁定结束时间"); b.Property("ModifiedTime") .HasColumnType("timestamp with time zone") .HasComment("修改时间"); b.Property("NormalizedEmail") .HasMaxLength(256) .HasColumnType("character varying(256)") .HasComment("标准化电子邮箱(大写)"); b.Property("NormalizedUserName") .HasMaxLength(256) .HasColumnType("character varying(256)") .HasComment("标准化账号(大写)"); b.Property("PasswordHash") .HasColumnType("text") .HasComment("密码哈希值"); b.Property("PhoneNumber") .IsRequired() .HasColumnType("text") .HasComment("电话号码"); b.Property("PhoneNumberConfirmed") .HasColumnType("boolean") .HasComment("电话号码是否已验证"); b.Property("RealName") .HasMaxLength(50) .HasColumnType("character varying(50)") .HasComment("用户名"); b.Property("SecurityStamp") .HasColumnType("text") .HasComment("安全戳,用于并发控制"); b.Property("TwoFactorEnabled") .HasColumnType("boolean") .HasComment("是否启用双因素认证"); b.Property("UserName") .IsRequired() .HasMaxLength(256) .HasColumnType("character varying(256)") .HasComment("账号"); b.HasKey("Id"); b.HasIndex("Email") .IsUnique() .HasDatabaseName("IX_Users_Email"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex"); b.HasIndex("PhoneNumber") .IsUnique() .HasDatabaseName("IX_Users_PhoneNumber"); b.HasIndex("UserName") .IsUnique() .HasDatabaseName("IX_Users_UserName"); b.ToTable("Users", null, t => { t.HasComment("用户表"); }); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Device.CellularDevice", b => { b.Property("Id") .HasColumnType("text") .HasComment("设备ID"); b.Property("AgentPort") .HasColumnType("integer") .HasComment("Agent端口"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasComment("创建时间"); b.Property("CreatedBy") .IsRequired() .HasColumnType("text"); b.Property("Description") .IsRequired() .HasMaxLength(500) .HasColumnType("character varying(500)") .HasComment("设备描述"); b.Property("IpAddress") .IsRequired() .HasMaxLength(45) .HasColumnType("character varying(45)") .HasComment("IP地址"); b.Property("IsDeleted") .HasColumnType("boolean"); b.Property("IsEnabled") .HasColumnType("boolean") .HasComment("是否启用"); b.Property("IsRunning") .HasColumnType("boolean") .HasComment("设备状态(启动/未启动)"); b.Property("Name") .IsRequired() .HasMaxLength(100) .HasColumnType("character varying(100)") .HasComment("设备名称"); b.Property("ProtocolVersionId") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)") .HasComment("协议版本ID"); b.Property("SerialNumber") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)") .HasComment("序列号"); b.Property("UpdatedAt") .IsRequired() .HasColumnType("timestamp with time zone") .HasComment("更新时间"); b.Property("UpdatedBy") .HasColumnType("text"); b.HasKey("Id"); b.HasIndex("ProtocolVersionId") .HasDatabaseName("IX_CellularDevices_ProtocolVersionId"); b.HasIndex("SerialNumber") .IsUnique() .HasDatabaseName("IX_CellularDevices_SerialNumber"); b.ToTable("CellularDevices", null, t => { t.HasComment("蜂窝设备表"); }); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Device.ProtocolVersion", b => { b.Property("Id") .HasColumnType("text") .HasComment("版本ID"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone") .HasComment("创建时间"); b.Property("CreatedBy") .IsRequired() .HasColumnType("text"); b.Property("Description") .HasMaxLength(500) .HasColumnType("character varying(500)") .HasComment("版本描述"); b.Property("IsDeleted") .HasColumnType("boolean"); b.Property("IsEnabled") .HasColumnType("boolean") .HasComment("是否启用"); b.Property("MinimumSupportedVersion") .HasMaxLength(20) .HasColumnType("character varying(20)") .HasComment("最低支持版本"); b.Property("Name") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)") .HasComment("版本名称"); b.Property("ReleaseDate") .HasColumnType("timestamp with time zone") .HasComment("发布日期"); b.Property("UpdatedAt") .IsRequired() .HasColumnType("timestamp with time zone") .HasComment("更新时间"); b.Property("UpdatedBy") .HasColumnType("text"); b.Property("Version") .IsRequired() .HasMaxLength(20) .HasColumnType("character varying(20)") .HasComment("版本号"); b.HasKey("Id"); b.HasIndex("Version") .IsUnique() .HasDatabaseName("IX_ProtocolVersions_Version"); b.ToTable("ProtocolVersions", null, t => { t.HasComment("协议版本表"); }); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Logging.LoginLog", b => { b.Property("Id") .HasColumnType("text") .HasComment("日志ID"); b.Property("Browser") .HasMaxLength(100) .HasColumnType("character varying(100)") .HasComment("浏览器信息"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("FailureReason") .HasMaxLength(200) .HasColumnType("character varying(200)") .HasComment("失败原因"); b.Property("IpAddress") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)") .HasComment("登录IP"); b.Property("IsDeleted") .HasColumnType("boolean"); b.Property("IsSuccess") .HasColumnType("boolean") .HasComment("登录状态(成功/失败)"); b.Property("Location") .HasMaxLength(200) .HasColumnType("character varying(200)") .HasComment("登录位置"); b.Property("LoginSource") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)"); b.Property("LoginTime") .HasColumnType("timestamp with time zone") .HasComment("登录时间"); b.Property("LoginType") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)"); b.Property("OperatingSystem") .HasMaxLength(100) .HasColumnType("character varying(100)") .HasComment("操作系统信息"); b.Property("SessionId") .HasMaxLength(100) .HasColumnType("character varying(100)"); b.Property("UpdatedAt") .HasColumnType("timestamp with time zone"); b.Property("UserAgent") .IsRequired() .HasMaxLength(500) .HasColumnType("character varying(500)") .HasComment("设备信息"); b.Property("UserId") .IsRequired() .HasMaxLength(450) .HasColumnType("character varying(450)") .HasComment("用户ID"); b.HasKey("Id"); b.HasIndex("IpAddress") .HasDatabaseName("IX_LoginLogs_IpAddress"); b.HasIndex("LoginTime") .HasDatabaseName("IX_LoginLogs_LoginTime"); b.HasIndex("UserId") .HasDatabaseName("IX_LoginLogs_UserId"); b.HasIndex("UserId", "LoginTime") .HasDatabaseName("IX_LoginLogs_UserId_LoginTime"); b.ToTable("LoginLogs", null, t => { t.HasComment("用户登录日志表"); }); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Permission", b => { b.Property("Id") .HasColumnType("text"); b.Property("Code") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.Property("Description") .HasMaxLength(200) .HasColumnType("character varying(200)"); b.Property("Name") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)"); b.Property("Type") .IsRequired() .HasMaxLength(50) .HasColumnType("character varying(50)"); b.HasKey("Id"); b.ToTable("Permissions", (string)null); }); modelBuilder.Entity("CellularManagement.Domain.Entities.RolePermission", b => { b.Property("RoleId") .HasColumnType("text"); b.Property("PermissionId") .HasColumnType("text"); b.Property("CreatedAt") .HasColumnType("timestamp with time zone"); b.HasKey("RoleId", "PermissionId"); b.HasIndex("PermissionId"); b.ToTable("RolePermissions", (string)null); }); modelBuilder.Entity("CellularManagement.Domain.Entities.UserRole", b => { b.Property("UserId") .HasColumnType("text"); b.Property("RoleId") .HasColumnType("text"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("UserRoles", null, t => { t.HasComment("用户角色关系表"); }); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Device.CellularDevice", b => { b.HasOne("CellularManagement.Domain.Entities.Device.ProtocolVersion", "ProtocolVersion") .WithMany() .HasForeignKey("ProtocolVersionId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("ProtocolVersion"); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Logging.LoginLog", b => { b.HasOne("CellularManagement.Domain.Entities.AppUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); }); modelBuilder.Entity("CellularManagement.Domain.Entities.RolePermission", b => { b.HasOne("CellularManagement.Domain.Entities.Permission", "Permission") .WithMany("RolePermissions") .HasForeignKey("PermissionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("CellularManagement.Domain.Entities.AppRole", "Role") .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Permission"); b.Navigation("Role"); }); modelBuilder.Entity("CellularManagement.Domain.Entities.UserRole", b => { b.HasOne("CellularManagement.Domain.Entities.AppRole", "Role") .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("CellularManagement.Domain.Entities.AppUser", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Role"); b.Navigation("User"); }); modelBuilder.Entity("CellularManagement.Domain.Entities.Permission", b => { b.Navigation("RolePermissions"); }); #pragma warning restore 612, 618 } } }