2025-07-08 23:06:19 +08:00
|
|
|
using AGSS.Models.Entities;
|
|
|
|
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
|
|
namespace AGSS.DbSet
|
|
|
|
{
|
2025-07-15 22:21:06 +08:00
|
|
|
public class ApplicationDbContext : IdentityDbContext<UserModel, RoleModel, string>
|
2025-07-08 23:06:19 +08:00
|
|
|
{
|
2025-07-09 13:57:43 +08:00
|
|
|
public override DbSet<UserModel> Users { get; set; }
|
|
|
|
public override DbSet<RoleModel> Roles { get; set; }
|
2025-07-15 22:21:06 +08:00
|
|
|
public DbSet<DictItem> DictItems { get; set; }
|
2025-07-14 15:10:13 +08:00
|
|
|
public DbSet<MenuModel> Menus { get; set; }
|
2025-07-09 13:57:43 +08:00
|
|
|
|
2025-07-08 23:06:19 +08:00
|
|
|
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
|
|
|
|
: base(options)
|
|
|
|
{
|
|
|
|
}
|
2025-07-15 22:21:06 +08:00
|
|
|
|
2025-07-09 13:57:43 +08:00
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
|
|
{
|
|
|
|
base.OnModelCreating(modelBuilder);
|
2025-07-15 22:21:06 +08:00
|
|
|
modelBuilder.Entity<DictItem>(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<DictItem>()
|
|
|
|
.HasOne(d => d.Parent)
|
|
|
|
.WithMany(d => d.Children)
|
|
|
|
.HasForeignKey(d => d.ParentId)
|
|
|
|
.OnDelete(DeleteBehavior.Cascade); // 级联删除
|
|
|
|
|
|
|
|
// 添加索引
|
|
|
|
modelBuilder.Entity<DictItem>()
|
|
|
|
.HasIndex(d => d.ParentId);
|
|
|
|
|
|
|
|
modelBuilder.Entity<DictItem>()
|
|
|
|
.HasIndex(d => d.ParentValue);
|
|
|
|
|
|
|
|
modelBuilder.Entity<DictItem>()
|
|
|
|
.HasIndex(d => d.Value);
|
|
|
|
|
|
|
|
modelBuilder.Entity<DictItem>()
|
|
|
|
.HasIndex(d => d.Tag);
|
|
|
|
|
|
|
|
// 确保顶级项的约束
|
|
|
|
modelBuilder.Entity<DictItem>()
|
|
|
|
.HasCheckConstraint("CK_TopLevelItems",
|
|
|
|
"ParentId IS NULL OR (Tag IS NOT NULL AND ParentValue IS NOT NULL)");
|
2025-07-09 13:57:43 +08:00
|
|
|
|
2025-07-11 16:17:31 +08:00
|
|
|
|
2025-07-14 15:10:13 +08:00
|
|
|
modelBuilder.Entity<MenuModel>()
|
|
|
|
.HasKey(m => m.Uuid);
|
|
|
|
|
|
|
|
modelBuilder.Entity<MenuModel>()
|
|
|
|
.HasOne<MenuModel>()
|
|
|
|
.WithMany()
|
|
|
|
.HasForeignKey(m => m.ParentId)
|
|
|
|
.OnDelete(DeleteBehavior.Restrict);
|
2025-07-11 16:17:31 +08:00
|
|
|
|
2025-07-09 13:57:43 +08:00
|
|
|
// 在这里添加额外的配置,如果需要的话
|
|
|
|
// 例如:
|
|
|
|
// modelBuilder.Entity<UserModel>().ToTable("CustomUsers");
|
|
|
|
// modelBuilder.Entity<RoleModel>().ToTable("CustomRoles");
|
|
|
|
}
|
2025-07-08 23:06:19 +08:00
|
|
|
}
|
|
|
|
}
|