using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using CellularManagement.Domain.Entities; namespace CellularManagement.Infrastructure.Configurations.Identity; /// /// AppUser 实体配置类 /// 用于配置用户实体在数据库中的映射关系 /// public sealed class AppUserConfiguration : IEntityTypeConfiguration { /// /// 配置 AppUser 实体 /// /// 实体类型构建器 public void Configure(EntityTypeBuilder builder) { // 配置表名 builder.ToTable("tb_users", t => t.HasComment("用户表")); // 配置索引 builder.HasIndex(u => u.UserName).IsUnique().HasDatabaseName("IX_user_UserName"); builder.HasIndex(u => u.Email).IsUnique().HasDatabaseName("IX_user_Email"); builder.HasIndex(u => u.PhoneNumber).IsUnique().HasDatabaseName("IX_user_PhoneNumber"); builder.HasIndex(u => u.NormalizedEmail).HasDatabaseName("EmailIndex"); builder.HasIndex(u => u.NormalizedUserName).IsUnique().HasDatabaseName("UserNameIndex"); // 配置属性 builder.Property(u => u.Id) .HasComment("用户ID,主键"); builder.Property(u => u.UserName) .IsRequired() .HasMaxLength(256) .HasComment("账号"); builder.Property(u => u.NormalizedUserName) .HasMaxLength(256) .HasComment("标准化账号(大写)"); builder.Property(u => u.Email) .IsRequired() .HasMaxLength(256) .HasComment("电子邮箱"); builder.Property(u => u.NormalizedEmail) .HasMaxLength(256) .HasComment("标准化电子邮箱(大写)"); builder.Property(u => u.EmailConfirmed) .HasComment("邮箱是否已验证"); builder.Property(u => u.PasswordHash) .HasComment("密码哈希值"); builder.Property(u => u.SecurityStamp) .HasComment("安全戳,用于并发控制"); builder.Property(u => u.ConcurrencyStamp) .IsConcurrencyToken() .HasComment("并发控制戳"); builder.Property(u => u.PhoneNumber) .IsRequired() .HasComment("电话号码"); builder.Property(u => u.PhoneNumberConfirmed) .HasComment("电话号码是否已验证"); builder.Property(u => u.TwoFactorEnabled) .HasComment("是否启用双因素认证"); builder.Property(u => u.LockoutEnd) .HasComment("账户锁定结束时间"); builder.Property(u => u.LockoutEnabled) .HasComment("是否启用账户锁定"); builder.Property(u => u.AccessFailedCount) .HasComment("登录失败次数"); builder.Property(u => u.RealName) .HasMaxLength(50) .HasComment("用户名"); // 配置审计字段 builder.Property(u => u.CreatedTime) .IsRequired() .HasColumnType("timestamp with time zone") .HasComment("创建时间"); builder.Property(u => u.ModifiedTime) .HasColumnType("timestamp with time zone") .HasComment("修改时间"); builder.Property(u => u.IsActive) .IsRequired() .HasDefaultValue(true) .HasComment("用户状态(true: 启用, false: 禁用)"); builder.Property(u => u.IsDeleted) .IsRequired() .HasDefaultValue(false) .HasComment("是否已删除"); builder.Property(u => u.LastLoginTime) .HasColumnType("timestamp with time zone") .HasComment("最后登录时间"); // 添加软删除过滤器 builder.HasQueryFilter(u => !u.IsDeleted); } }