如何从实体框架中的关系表中删除已删除字段的行

时间:2013-01-01 07:55:38

标签: c# entity-framework

我有StudentCourse以及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中删除相应的行。我该怎么办?

1 个答案:

答案 0 :(得分:1)

我相信您确实需要StudentCourse之间的多对多关系:学生可以参加许多课程,而课程可以许多学生。

在这种情况下,您可以简化模型:

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