2014-01-23 80 views
0

我有一個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關係不被刪除。我究竟做錯了什麼?

回答

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); 
} 
+0

但是,當我使用調試模式,我可以看到,老師對象有0名學生(我認爲,因爲他們沒有加載)。我如何加載學生然後逐個刪除它們? – user3182508

+0

您可能正在清除副本而不是實體集本身。 –

+0

但是從你的例子中,teacher.Students.ToList()是EMPTY,因爲它的模型是從發佈參數綁定的,而不是從數據庫加載的。那該怎麼辦呢? – user3182508