我有teacher
与students
有多对多的关系。现在,在Edit Teacher
方法中,我想首先删除他拥有的所有学生,然后添加所选的学生。
这是我的代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Name")] Teacher teacher, FormCollection form)
{
if (ModelState.IsValid)
{
teacher.Students.Clear();
var students = form["Students"];
foreach (string id in students.Split(','))
{
teacher.Students.Add(db.Students.Find(int.Parse(id)));
}
db.Entry(teacher).State = EntityState.Modified;
db.saveChanges();
}
}
除问题外,所有Teacher-Student
关系均未被删除。我做错了什么?
答案 0 :(得分:1)
Clear()没有按照你的想法工作......在做批量生产时,EF有点裤子。删除...你必须迭代它们并逐个删除。例如你需要像...这样的东西。
foreach (var student in teacher.Students.ToList())
{
db.Remove(student);
}
在此示例中,您需要ToList()来创建副本,因为在枚举期间从大多数集合类中删除项目时,大多数集合类都不喜欢它。
编辑:要从数据库中获取值/实体,请执行类似
的操作List<Students> students = (from stu in db.Students
where stu.TeacherId = teacher.Id
select stu).ToList();
然后迭代这些并删除,如上所述,例如
foreach (var student in students)
{
db.Remove(student);
}