我有两个实体,学生和课程。鉴于学生证和课程ID,我需要删除他们的关系(意味着学生不再参加该课程)(请注意我不需要自己删除学生和课程,只需要他们的关系)。
我尝试过使用Students.Courses.Clear(),但它清除了每一门课程而不是特定课程。谢谢。
编辑: 在数据库中,学生和课程通过StudentCourse表与2列相关联:StudentID和CourseID。
我通常会删除该行以删除该关系,但是当从数据库生成模型时,它不会为该表创建实体。相反,学生和课程是彼此的导航属性,他们的关联设置为StudentCourse表。谢谢。
答案 0 :(得分:11)
您将拥有一个学生,课程和类似注册课程的东西,其中包含课程和学生的ID。只需在辍学时删除该记录,或在学生注册时创建该记录。
在EF可能是这样的:
courseToRemove = Student.Courses.FirstOrDefault(c => c.Name == "Mathematics");
Student.Courses.Remove(courseToRemove);
然后提交您的更改。
答案 1 :(得分:3)
如果您只有StudentID
和CourseID
并且您不想从数据库加载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
基础实体。