如何定义EF核心中两个不同实体的共同属性?



我有两个实体Student和course,如下所示

public class Student
{
public int Id { get; set; }
public string Name { get; set; }
[System.Text.Json.Serialization.JsonIgnore]
public virtual IList<Course> Courses { get; set; }
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IList<Student> Students { get; set; }
[ForeignKey(nameof(TeacherId))]
public  int TeacherId {get;set;}
public Teacher Teacher { get; set; }
}

现在我想根据情况将成绩列表添加到包含课程或学生的年级和id的两个实体中。我是否必须定义带有studentId和CourseId的实体成绩,或者是否有其他方法可以在不创建实体

的情况下做到这一点?

你所描述的是CourseStudent之间的m:n关系,以及额外的参与分数信息。通过创建两个导航属性Student.CoursesCourse.Students,您已经在实体之间创建了一个隐式交叉表。为了添加等级,我建议创建一个专门的实体,例如CourseParticipation,它定义了CourseStudent之间的关系,并携带额外的信息(到目前为止,等级,以后可能更多):

public class CourseParticipation
{
public int Id { get; set; }
public int CourseId { get; set; }
public Course Course { get; set; }
public int StudentId { get; set; }
public Student Student { get; set; }
public int Grade { get; set; }
}
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
[System.Text.Json.Serialization.JsonIgnore]
public virtual IList<CourseParticipation> Courses { get; set; }
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IList<CourseParticipation> Participants { get; set; }
[ForeignKey(nameof(TeacherId))]
public  int TeacherId {get;set;}
public Teacher Teacher { get; set; }
}

通过这种方式,可以显式地创建关系,并为以后添加关系做好准备。

最新更新