如何删除两个实体之间的关系

时间:2011-09-20 18:07:34

标签: entity-framework

我有两个实体,学生和课程。鉴于学生证和课程ID,我需要删除他们的关系(意味着学生不再参加该课程)(请注意我不需要自己删除学生和课程,只需要他们的关系)。

我尝试过使用Students.Courses.Clear(),但它清除了每一门课程而不是特定课程。谢谢。

编辑: 在数据库中,学生和课程通过StudentCourse表与2列相关联:StudentID和CourseID。

我通常会删除该行以删除该关系,但是当从数据库生成模型时,它不会为该表创建实体。相反,学生和课程是彼此的导航属性,他们的关联设置为StudentCourse表。谢谢。

2 个答案:

答案 0 :(得分:11)

您将拥有一个学生,课程和类似注册课程的东西,其中包含课程和学生的ID。只需在辍学时删除该记录,或在学生注册时创建该记录。

在EF可能是这样的:

courseToRemove = Student.Courses.FirstOrDefault(c => c.Name == "Mathematics");
Student.Courses.Remove(courseToRemove);

然后提交您的更改。

答案 1 :(得分:3)

如果您只有StudentIDCourseID并且您不想从数据库加载Student及其全部Courses,那么您可以尝试这个技巧:

// Prepare dummy data
var student = new Student() { StudentID = ... };
var course = new Course() { CourseID = ... };
student.Courses.Add(course);  // Courses must be initialized collection

using (var context = new YourContext())
{
    context.Students.Attach(student);
    // Now context should believe that it has Student with single Course loaded from the database
    // So remove that link to existing course but don't delete the course       
    student.Courses.Remove(course);
    context.SaveChanges();
}

这适用于POCO。我不确定这个技巧是否适用于EntityObject基础实体。

相关问题