Files
TechHelper/TechHelper.Server/Context/Configuration/SubmissionConfiguration.cs
SpecialX 439c8a2421
Some checks failed
TechAct / explore-gitea-actions (push) Failing after 30s
feat: 添加学生提交系统功能
- 添加学生提交管理服务 (StudentSubmissionService, StudentSubmissionDetailService)
- 新增学生提交相关控制器 (StudentSubmissionController, StudentSubmissionDetailController)
- 添加学生提交数据传输对象 (StudentSubmissionDetailDto, StudentSubmissionSummaryDto)
- 新增学生提交相关页面组件 (StudentExamView, ExamDetailView, StudentCard等)
- 添加学生提交信息卡片组件 (SubmissionInfoCard, TeacherSubmissionInfoCard)
- 更新数据库迁移文件以支持提交系统
2025-09-09 15:42:31 +08:00

89 lines
2.8 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")
.IsRequired()
.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。
}
}
}