Files
TechHelper/TechHelper.Server/Context/Configuration/SubmissionConfiguration.cs
2025-06-20 15:37:39 +08:00

91 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Entities.Contracts;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
namespace TechHelper.Context.Configuration
{
public class SubmissionConfiguration : IEntityTypeConfiguration<Submission>
{
public void Configure(EntityTypeBuilder<Submission> builder)
{
// 1. 设置表名
builder.ToTable("submissions");
// 2. 设置主键
builder.HasKey(s => s.Id);
// 3. 配置列名、必需性、精度及其他属性
// Id
builder.Property(s => s.Id)
.HasColumnName("id");
// AssignmentId
builder.Property(s => s.AssignmentId)
.HasColumnName("assignment_id")
.IsRequired();
// StudentId
builder.Property(s => s.StudentId)
.HasColumnName("student_id")
.IsRequired();
builder.Property(s => s.AttemptNumber)
.HasColumnName("attempt_number")
.IsRequired();
builder.Property(s => s.SubmissionTime)
.HasColumnName("submission_time"); // 没有 [Required] 属性,所以可以是可空的
builder.Property(s => s.OverallGrade)
.HasColumnName("overall_grade")
.HasPrecision(5, 2); // 应用精度设置
// OverallFeedback
builder.Property(s => s.OverallFeedback)
.HasColumnName("overall_feedback");
// GradedBy (现为 Guid? 类型)
builder.Property(s => s.GraderId)
.HasColumnName("graded_by");
builder.Property(s => s.GradedAt)
.HasColumnName("graded_at");
builder.Property(s => s.IsDeleted)
.HasColumnName("deleted")
.HasDefaultValue(false);
builder.Property(s => s.Status)
.HasColumnName("status")
.IsRequired()
.HasMaxLength(15);
builder.HasOne(s => s.Assignment) // 当前 Submission 有一个 Assignment
.WithMany(a => a.Submissions) // 那个 Assignment 可以有多个 Submission
.HasForeignKey(s => s.AssignmentId) // 外键是 Submission.AssignmentId
.OnDelete(DeleteBehavior.Cascade); // 当 Assignment 被删除时,相关的 Submission 也级联删除。
builder.HasOne(s => s.Student) // 当前 Submission 有一个 Student (User)
.WithMany(u => u.SubmissionsAsStudent) // 那个 User (Student) 可以有多个 Submission
.HasForeignKey(s => s.StudentId) // 外键是 Submission.StudentId
.OnDelete(DeleteBehavior.Restrict); // 当 User (Student) 被删除时,如果还有其提交的 Submission则会阻止删除。
builder.HasOne(s => s.Grader) // 当前 Submission 有一个 Grader (User),可以是空的
.WithMany(u => u.GradedSubmissions) // 那个 User (Grader) 可以批改多个 Submission
.HasForeignKey(s => s.GraderId) // 外键是 Submission.GradedBy
.OnDelete(DeleteBehavior.SetNull); // 当 User (Grader) 被删除时,如果 GradedBy 是可空的,则将其设置为 NULL。
builder.HasMany(s => s.SubmissionDetails) // 当前 Submission 有多个 SubmissionDetail
.WithOne(sd => sd.Submission); // 每一个 SubmissionDetail 都有一个 Submission
}
}
}