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.
如何在這種情況下刪除子記錄?
參見[這裏](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
這與兒童相關記錄無關。如果你不使用EF,你將會遇到同樣的問題。你正在修改一個集合,而你正在迭代它。這是不允許的。你需要使用一個for循環,然後向後移動該集合中的項目,或者如果可能,只需從集合中執行RemoveAll! –