从记录中删除所有子记录

时间:2014-01-23 09:26:37

标签: c# entity-framework

我有teacherstudents有多对多的关系。现在,在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关系均未被删除。我做错了什么?

1 个答案:

答案 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);
}