77 lines
2.8 KiB
C#
77 lines
2.8 KiB
C#
using Entities.Contracts;
|
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace TechHelper.Context.Configuration
|
|
{
|
|
public class AssignmentQuestionConfiguration : IEntityTypeConfiguration<AssignmentQuestion>
|
|
{
|
|
public void Configure(EntityTypeBuilder<AssignmentQuestion> builder)
|
|
{
|
|
// 1. 设置表名
|
|
builder.ToTable("assignment_questions");
|
|
|
|
// 2. 设置主键
|
|
builder.HasKey(aq => aq.Id);
|
|
|
|
// 3. 配置列名、必需性及其他属性
|
|
|
|
// 配置 Id 列
|
|
builder.Property(aq => aq.Id)
|
|
.HasColumnName("id");
|
|
|
|
// 配置 QuestionId 列 (已修正拼写)
|
|
builder.Property(aq => aq.QuestionId)
|
|
.HasColumnName("question_id");
|
|
|
|
|
|
// 配置 QuestionNumber 列
|
|
builder.Property(aq => aq.Index)
|
|
.HasColumnName("question_number")
|
|
.IsRequired(); // uint 类型默认非空
|
|
|
|
// 配置 CreatedAt 列
|
|
builder.Property(aq => aq.CreatedAt)
|
|
.HasColumnName("created_at")
|
|
.IsRequired(); // 通常创建时间字段是非空的
|
|
|
|
builder.Property(aq => aq.Score)
|
|
.HasColumnName("score");
|
|
|
|
builder.Property(aq => aq.IsDeleted)
|
|
.HasColumnName("deleted")
|
|
.HasDefaultValue(false); // 适用于软删除策略
|
|
|
|
// 4. 配置导航属性和外键关系
|
|
|
|
// ---
|
|
// 配置 AssignmentQuestion 到 Question 的关系 (多对一)
|
|
// 一个 AssignmentQuestion 属于一个 Question。
|
|
//
|
|
// 假设 `Question` 实体中有一个名为 `AssignmentQuestions` 的 `ICollection<AssignmentQuestion>` 集合属性。
|
|
builder.HasOne(aq => aq.Question) // 当前 AssignmentQuestion 有一个 Question
|
|
.WithMany(q => q.AssignmentQuestions) // 那个 Question 可以有多个 AssignmentQuestion
|
|
.HasForeignKey(aq => aq.QuestionId) // 外键是 AssignmentQuestion.QuestionId
|
|
.OnDelete(DeleteBehavior.Cascade); // 当 Question 被删除时,相关的 AssignmentQuestion 也级联删除。
|
|
|
|
|
|
builder.HasOne(aq => aq.QuestionContext)
|
|
.WithMany(qc => qc.Questions)
|
|
.HasForeignKey(aq => aq.QuestionContextId)
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
|
|
// ---
|
|
// 配置 AssignmentQuestion 到 SubmissionDetail 的关系 (一对多)
|
|
// 一个 AssignmentQuestion 可以有多个 SubmissionDetail。
|
|
//
|
|
// 这个关系通常从 "多" 的一方(`SubmissionDetail` 实体)来配置外键。
|
|
// 假设 `SubmissionDetail` 实体有一个 `AssignmentQuestionId` 外键和 `AssignmentQuestion` 导航属性。
|
|
builder.HasMany(aq => aq.SubmissionDetails) // 当前 AssignmentQuestion 有多个 SubmissionDetail
|
|
.WithOne(sd => sd.AssignmentQuestion); // 每一个 SubmissionDetail 都有一个 AssignmentQuestion
|
|
// .HasForeignKey(sd => sd.AssignmentQuestionId); // 外键的配置应在 `SubmissionDetailConfiguration` 中进行
|
|
}
|
|
}
|
|
|
|
|
|
}
|