using AGSS.Models.Entities; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; namespace AGSS.DbSet { public class ApplicationDbContext : IdentityDbContext { public override DbSet Users { get; set; } public override DbSet Roles { get; set; } public DbSet DictItems { get; set; } public DbSet Menus { get; set; } public ApplicationDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(entity => { entity.HasKey(e => e.Uuid); entity.Property(e => e.ParentId).HasColumnName("parentid"); entity.Property(e => e.Tag).HasColumnName("tag"); entity.Property(e => e.CreateTime).HasColumnName("createtime"); entity.Property(e => e.ParentValue).HasColumnName("parentvalue"); entity.Property(e => e.Value).HasColumnName("value"); entity.Property(e => e.Label).HasColumnName("label"); entity.Property(e => e.Tag).HasColumnName("tag"); }); // 配置自引用关系 modelBuilder.Entity() .HasOne(d => d.Parent) .WithMany(d => d.Children) .HasForeignKey(d => d.ParentId) .OnDelete(DeleteBehavior.Cascade); // 级联删除 // 添加索引 modelBuilder.Entity() .HasIndex(d => d.ParentId); modelBuilder.Entity() .HasIndex(d => d.ParentValue); modelBuilder.Entity() .HasIndex(d => d.Value); modelBuilder.Entity() .HasIndex(d => d.Tag); // 确保顶级项的约束 modelBuilder.Entity() .HasCheckConstraint("CK_TopLevelItems", "ParentId IS NULL OR (Tag IS NOT NULL AND ParentValue IS NOT NULL)"); modelBuilder.Entity() .HasKey(m => m.Uuid); modelBuilder.Entity() .HasOne() .WithMany() .HasForeignKey(m => m.ParentId) .OnDelete(DeleteBehavior.Restrict); // 在这里添加额外的配置,如果需要的话 // 例如: // modelBuilder.Entity().ToTable("CustomUsers"); // modelBuilder.Entity().ToTable("CustomRoles"); } } }