struct&&assiQues
This commit is contained in:
@@ -30,18 +30,13 @@ namespace TechHelper.Context.Configuration
|
||||
.HasColumnName("student_id")
|
||||
.IsRequired();
|
||||
|
||||
// AttemptNumber
|
||||
// 注意:如果 AttemptNumber 应该是一个递增的数字,Guid 可能不是最合适的类型。
|
||||
// 但根据你的定义,这里按 Guid 类型配置。
|
||||
builder.Property(s => s.AttemptNumber)
|
||||
.HasColumnName("attempt_number")
|
||||
.IsRequired();
|
||||
|
||||
// SubmissionTime
|
||||
builder.Property(s => s.SubmissionTime)
|
||||
.HasColumnName("submission_time"); // 没有 [Required] 属性,所以可以是可空的
|
||||
|
||||
// OverallGrade
|
||||
builder.Property(s => s.OverallGrade)
|
||||
.HasColumnName("overall_grade")
|
||||
.HasPrecision(5, 2); // 应用精度设置
|
||||
@@ -51,59 +46,45 @@ namespace TechHelper.Context.Configuration
|
||||
.HasColumnName("overall_feedback");
|
||||
|
||||
// GradedBy (现为 Guid? 类型)
|
||||
builder.Property(s => s.GradedBy)
|
||||
.HasColumnName("graded_by"); // 作为可空外键,不需要 IsRequired()
|
||||
builder.Property(s => s.GraderId)
|
||||
.HasColumnName("graded_by");
|
||||
|
||||
|
||||
// GradedAt
|
||||
builder.Property(s => s.GradedAt)
|
||||
.HasColumnName("graded_at");
|
||||
|
||||
// IsDeleted
|
||||
|
||||
builder.Property(s => s.IsDeleted)
|
||||
.HasColumnName("deleted")
|
||||
.HasDefaultValue(false);
|
||||
|
||||
// Status (枚举作为字符串存储)
|
||||
builder.Property(s => s.Status)
|
||||
.HasColumnName("status")
|
||||
.IsRequired()
|
||||
.HasConversion<string>() // <--- 重要:将枚举存储为字符串
|
||||
.HasMaxLength(15); // <--- 应用最大长度
|
||||
.HasMaxLength(15);
|
||||
|
||||
|
||||
|
||||
// 4. 配置导航属性和外键关系
|
||||
|
||||
// ---
|
||||
// 配置 Submission 到 Assignment 的关系 (多对一)
|
||||
// 一个 Submission 属于一个 Assignment。
|
||||
builder.HasOne(s => s.Assignment) // 当前 Submission 有一个 Assignment
|
||||
.WithMany(a => a.Submissions) // 那个 Assignment 可以有多个 Submission
|
||||
.HasForeignKey(s => s.AssignmentId) // 外键是 Submission.AssignmentId
|
||||
.OnDelete(DeleteBehavior.Cascade); // 当 Assignment 被删除时,相关的 Submission 也级联删除。
|
||||
|
||||
// ---
|
||||
// 配置 Submission 到 User (Student) 的关系 (多对一)
|
||||
// 一个 Submission 由一个 User (Student) 提交。
|
||||
|
||||
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,则会阻止删除。
|
||||
|
||||
// ---
|
||||
// 配置 Submission 到 User (Grader) 的关系 (多对一)
|
||||
// 一个 Submission 可以由一个 User (Grader) 批改 (可选)。
|
||||
builder.HasOne(s => s.Grader) // 当前 Submission 有一个 Grader (User),可以是空的
|
||||
.WithMany(u => u.GradedSubmissions) // 那个 User (Grader) 可以批改多个 Submission
|
||||
.HasForeignKey(s => s.GradedBy) // 外键是 Submission.GradedBy
|
||||
.HasForeignKey(s => s.GraderId) // 外键是 Submission.GradedBy
|
||||
.OnDelete(DeleteBehavior.SetNull); // 当 User (Grader) 被删除时,如果 GradedBy 是可空的,则将其设置为 NULL。
|
||||
// 如果 GradedBy 是不可空的,需要改为 Restrict 或 Cascade。
|
||||
|
||||
// ---
|
||||
// 配置 Submission 到 SubmissionDetail 的关系 (一对多)
|
||||
// 一个 Submission 可以有多个 SubmissionDetail。
|
||||
// 这个关系的外键配置通常在 "多" 的一方 (`SubmissionDetail` 实体) 进行。
|
||||
|
||||
builder.HasMany(s => s.SubmissionDetails) // 当前 Submission 有多个 SubmissionDetail
|
||||
.WithOne(sd => sd.Submission); // 每一个 SubmissionDetail 都有一个 Submission
|
||||
// .HasForeignKey(sd => sd.SubmissionId); // 外键的配置应在 `SubmissionDetailConfiguration` 中进行
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user