我有Student
,Course
以及StudentCourse
之间的关系。这些类中的字段如下:
public class Student
{
public int StudentId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int CourseId { get; set; }
[ForeignKey("CourseId")]
public Course Course { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
}
public class StudentCourse
{
public int ID { get; set; }
public virtual Student Student { get; set; }
public virtual Course Course {get;set;}
}
当我删除student
表中的学生时,我想从关系StudentClass
中删除相应的行。我该怎么办?
答案 0 :(得分:1)
我相信您确实需要Student
和Course
之间的多对多关系:学生可以参加许多课程,而课程可以许多学生。
在这种情况下,您可以简化模型:
public class Student
{
public int StudentId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Course> Courses { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public ICollection<Student> Students { get; set; }
}
不需要“加入实体”StudentCourse
。 EF将从此模型创建三个表:Students
表,Courses
表和StudentCourses
(或CourseStudents
)表,它将具有复合主键{{1} (或命名相似)。这两个部分都是各自表的外键。
对于数据库中的两个FK关系,默认情况下将启用级联删除。因此,如果删除(StudentId, CourseId)
,则会自动删除连接表中的链接记录。 <{1}}被删除时也一样。
您还可以定义连接表和连接表列明确的详细名称,也可以只使用单个集合,例如Student
中的Course
集合,但不包含{{ 1 {} Courses
中的集合。您必须使用Fluent API:
Student