2016-04-07 219 views
0

我有一個提交控制器與其他幾個表有一對多的關係。以下是我的型號:刪除記錄以及子記錄

public partial class Submission 
{ 
    public Submission() 
    { 
     this.WorkorderLogs = new HashSet<WorkorderLog>(); 
    } 

    public int Id { get; set; } 
    public int WorkOrderId { get; set; } 
    public int PartStagingId { get; set; } 
    public System.DateTime SubmissionDate { get; set; } 

    public virtual PartStaging PartStaging { get; set; } 
    public virtual WorkOrder WorkOrder { get; set; } 
    public virtual ICollection<WorkorderLog> WorkorderLogs { get; set; } 
} 

我希望應用程序在刪除提交記錄時刪除所有子記錄。下面是我的刪除方法:

[HttpPost, ActionName("Delete")] 
[ValidateAntiForgeryToken] 
public ActionResult DeleteConfirmed(int id) 
{ 
    Submission submission = db.Submissions.Find(id); 

    foreach (var w in submission.WorkorderLogs) 
    { 
     submission.WorkorderLogs.Remove(w); 
    } 

    db.Submissions.Remove(submission); 
    db.SaveChanges(); 

    return RedirectToAction("Index"); 
} 

這給了我在foreach循環的第一次迭代後的錯誤。以下是我得到的錯誤:

Exception Details: System.InvalidOperationException: Collection was modified; enumeration operation may not execute. 

如何在這種情況下刪除子記錄?

+0

參見[這裏](http://stackoverflow.com/questions/16654828/how-to-remove柴爾德一到多的相關-記錄功能於EF-代碼優先數據庫)。您也可以配置級聯刪除,而不是先刪除所有子級。見[這裏](http://stackoverflow.com/questions/5614485/deleting-multiple-records-for-a-related-table),和[這裏](http://stackoverflow.com/questions/5448702/cascading -deletes-with-entity-framework-related-entities-deleted-by-ef),... – Jasen

+0

這與兒童相關記錄無關。如果你不使用EF,你將會遇到同樣的問題。你正在修改一個集合,而你正在迭代它。這是不允許的。你需要使用一個for循環,然後向後移動該集合中的項目,或者如果可能,只需從集合中執行RemoveAll! –

回答

0

我不啓用級聯刪除級聯,但我修改了foreach循環和它的作品

foreach (var w in db.WorkorderLogs.Where(x => x.SubmissionId == submission.Id)) 
{ 
    db.WorkorderLogs.Remove(w); 
}