using Entities.Contracts; using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore; namespace TechHelper.Context.Configuration { public class UserConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.ToTable("AspNetUsers"); builder.Property(u => u.RefreshToken) .HasColumnName("refresh_token"); builder.Property(u => u.RefreshTokenExpiryTime) .HasColumnName("refresh_token_expiry_time"); builder.Property(u => u.IsDeleted) .HasColumnName("deleted") .HasDefaultValue(false); builder.HasMany(u => u.TaughtClassesLink) // 一个 User (老师) 可以教授多个班级 .WithOne(ct => ct.Teacher) // 一个 ClassTeacher 记录对应一个 Teacher .HasForeignKey(ct => ct.TeacherId) // 外键在 ClassTeacher.TeacherId .OnDelete(DeleteBehavior.Restrict); // 限制删除:如果老师有任教记录,则不允许删除 // User 作为学生,与 ClassStudent 的关系 (一对多) builder.HasMany(u => u.EnrolledClassesLink) // 一个 User (学生) 可以注册多个班级 .WithOne(cs => cs.Student) // 一个 ClassStudent 记录对应一个 Student .HasForeignKey(cs => cs.StudentId) // 外键在 ClassStudent.StudentId .OnDelete(DeleteBehavior.Restrict); // 限制删除:如果学生有注册记录,则不允许删除 // User 作为创建者,与 Question 的关系 (一对多) builder.HasMany(u => u.CreatedQuestions) // 一个 User 可以创建多个题目 .WithOne(q => q.Creator) // 一个 Question 对应一个 Creator .HasForeignKey(q => q.CreatorId) // 外键在 Question.CreatedBy .OnDelete(DeleteBehavior.Restrict); // 限制删除:如果创建者有题目,则不允许删除 // User 作为创建者,与 Assignment 的关系 (一对多) builder.HasMany(u => u.CreatedAssignments) // 一个 User 可以创建多个作业 .WithOne(a => a.Creator) // 一个 Assignment 对应一个 Creator .HasForeignKey(a => a.CreatorId) // 外键在 Assignment.CreatedBy .OnDelete(DeleteBehavior.Restrict); // 限制删除:如果创建者有作业,则不允许删除 builder.HasMany(u => u.SubmissionDetails) // 一个 User (学生) 可以有多个提交详情记录 .WithOne(sd => sd.Student) // 一个 SubmissionDetail 对应一个 User (学生) .HasForeignKey(sd => sd.StudentId) // 外键在 SubmissionDetail.StudentId .OnDelete(DeleteBehavior.Restrict); // 限制删除:如果学生有提交详情,则不允许删除 // User 作为学生,与 Submission 的关系 (一对多) builder.HasMany(u => u.SubmissionsAsStudent) // 一个 User (学生) 可以有多个提交记录 .WithOne(s => s.Student) // 一个 Submission 对应一个 Student .HasForeignKey(s => s.StudentId) // 外键在 Submission.StudentId .OnDelete(DeleteBehavior.Restrict); // 限制删除:如果学生有提交记录,则不允许删除 // User 作为批改者,与 Submission 的关系 (一对多) builder.HasMany(u => u.GradedSubmissions) // 一个 User (批改者) 可以批改多个提交 .WithOne(s => s.Grader) // 一个 Submission 对应一个 Grader .HasForeignKey(s => s.GraderId) // 外键在 Submission.GradedBy .OnDelete(DeleteBehavior.SetNull); // 因为 GradedBy 是可空的,所以批改者删除时,设为 NULL } } }