AGSSbackend/AGSS/DbSet/UserSet.cs

75 lines
2.7 KiB
C#
Raw Normal View History

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>
{
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; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
2025-07-15 22:21:06 +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-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);
// 在这里添加额外的配置,如果需要的话
// 例如:
// modelBuilder.Entity<UserModel>().ToTable("CustomUsers");
// modelBuilder.Entity<RoleModel>().ToTable("CustomRoles");
}
}
}