using Microsoft.EntityFrameworkCore; using bitforum.Models; using bitforum.Models.Page; using bitforum.Models.Page.Faq; using bitforum.Models.Page.Banner; using bitforum.Models.Account; using bitforum.Models.Log; using bitforum.Models.BBS; public class DefaultDbContext : DbContext { public DefaultDbContext(DbContextOptions options) : base(options) { } // 공통 사항 public DbSet Config { get; set; } public DbSet Document { get; set; } public DbSet FaqCategory { get; set; } public DbSet FaqItem { get; set; } public DbSet Popup { get; set; } public DbSet BannerPosition { get; set; } public DbSet BannerItem { get; set; } // 회원 public DbSet Member { get; set; } public DbSet MemberApprove { get; set; } public DbSet MemberGrade { get; set; } public DbSet RefreshToken { get; set; } public DbSet EmailVerifyToken { get; set; } public DbSet EmailVerifyNumber { get; set; } public DbSet LoginLog { get; set; } public DbSet EmailLog { get; set; } public DbSet EmailChangeLog { get; set; } public DbSet NameChangeLog { get; set; } // 게시판 public DbSet BoardGroup { get; set; } public DbSet Board { get; set; } public DbSet BoardMeta { get; set; } public DbSet Post { get; set; } public DbSet PostMeta { get; set; } public DbSet Comment { get; set; } public DbSet CommentMeta { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 삭제 시 SET NULL 1:N 관계 modelBuilder.Entity().HasOne(e => e.Member).WithMany(e => e.LoginLog).HasForeignKey(e => e.MemberID).OnDelete(DeleteBehavior.SetNull); modelBuilder.Entity().HasOne(e => e.Member).WithMany(e => e.EmailLog).HasForeignKey(e => e.MemberID).OnDelete(DeleteBehavior.SetNull); // 회원 - 회원 기록들 1:N 관계 modelBuilder.Entity().HasOne(e => e.Member).WithMany(e => e.EmailChangeLog).HasForeignKey(e => e.MemberID).OnDelete(DeleteBehavior.NoAction); modelBuilder.Entity().HasOne(e => e.Member).WithMany(e => e.NameChangeLog).HasForeignKey(e => e.MemberID).OnDelete(DeleteBehavior.NoAction); // 회원 - 회원등급 1:1 관계 modelBuilder.Entity().HasOne(e => e.Member).WithOne(e => e.MemberApprove).HasForeignKey(e => e.MemberID).OnDelete(DeleteBehavior.NoAction); // 1:1 // 게시판 관계 설정 modelBuilder.Entity().HasOne(e => e.BoardGroup) .WithMany(e => e.Board).HasForeignKey(e => e.BoardGroupID).OnDelete(DeleteBehavior.NoAction); // 게시판 분류-게시판 관계 modelBuilder.Entity().HasOne(e => e.Board).WithMany(e => e.Post).HasForeignKey(e => e.BoardID).OnDelete(DeleteBehavior.NoAction); // 게시판-게시글 관계 modelBuilder.Entity().HasOne(e => e.Post).WithMany(e => e.Comment).HasForeignKey(e => e.PostID).OnDelete(DeleteBehavior.NoAction); // 게시판-댓글 관계 modelBuilder.Entity().HasOne(e => e.Parent).WithMany(e => e.Reply).HasForeignKey(e => e.ParentID).OnDelete(DeleteBehavior.NoAction); // 댓글 부모-자식 관계 } }