using AmtScanner.Api.Models; using Microsoft.EntityFrameworkCore; namespace AmtScanner.Api.Data; public class AppDbContext : DbContext { public AppDbContext(DbContextOptions options) : base(options) { } // 用户认证相关 public DbSet Users { get; set; } public DbSet Roles { get; set; } public DbSet UserRoles { get; set; } public DbSet Menus { get; set; } public DbSet RoleMenus { get; set; } // AMT设备相关(新表) public DbSet AmtPendingDevices_new { get; set; } public DbSet AmtDevices_new { get; set; } // Agent 设备(新表) public DbSet AgentDevices_new { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // User 配置 modelBuilder.Entity() .Property(u => u.UserName) .HasMaxLength(100); modelBuilder.Entity() .HasIndex(u => u.UserName) .IsUnique(); modelBuilder.Entity() .HasQueryFilter(u => !u.IsDeleted); // 全局过滤已删除用户 // Role 配置 modelBuilder.Entity() .Property(r => r.RoleCode) .HasMaxLength(50); modelBuilder.Entity() .HasIndex(r => r.RoleCode) .IsUnique(); // UserRole 配置(多对多) modelBuilder.Entity() .HasKey(ur => new { ur.UserId, ur.RoleId }); modelBuilder.Entity() .HasOne(ur => ur.User) .WithMany(u => u.UserRoles) .HasForeignKey(ur => ur.UserId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .HasOne(ur => ur.Role) .WithMany(r => r.UserRoles) .HasForeignKey(ur => ur.RoleId) .OnDelete(DeleteBehavior.Cascade); // Menu 配置 modelBuilder.Entity() .Property(m => m.Name) .HasMaxLength(100); modelBuilder.Entity() .HasIndex(m => m.Name); modelBuilder.Entity() .HasOne(m => m.Parent) .WithMany(m => m.Children) .HasForeignKey(m => m.ParentId) .OnDelete(DeleteBehavior.Restrict); // RoleMenu 配置(多对多) modelBuilder.Entity() .HasKey(rm => new { rm.RoleId, rm.MenuId }); modelBuilder.Entity() .HasOne(rm => rm.Role) .WithMany(r => r.RoleMenus) .HasForeignKey(rm => rm.RoleId) .OnDelete(DeleteBehavior.Cascade); modelBuilder.Entity() .HasOne(rm => rm.Menu) .WithMany(m => m.RoleMenus) .HasForeignKey(rm => rm.MenuId) .OnDelete(DeleteBehavior.Cascade); // AmtPendingDevice_new 配置 modelBuilder.Entity() .HasIndex(d => d.IpAddress) .IsUnique(); // AmtDevice_new 配置 modelBuilder.Entity() .HasKey(d => d.Uuid); modelBuilder.Entity() .HasIndex(d => d.IpAddress); // AgentDevice 配置 modelBuilder.Entity() .HasKey(d => d.Uuid); modelBuilder.Entity() .HasIndex(d => d.IpAddress); } }