88 lines
2.8 KiB
C#
88 lines
2.8 KiB
C#
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.Cascade); // 当 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。
|
||
|
||
}
|
||
}
|
||
}
|