与子记录一起删除记录
Posted
技术标签:
【中文标题】与子记录一起删除记录【英文标题】:Deleting record along with child records 【发布时间】:2016-04-07 17:23:37 【问题描述】:我有一个提交控制器,它与其他几个表具有一对多的关系。下面是我的模型:
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.
在这种情况下如何删除子记录?
【问题讨论】:
见here。您还可以配置级联删除,而不是先删除所有子项。请参阅here、here 和 ... 这与子相关记录无关。如果你不使用EF,你会遇到同样的问题。您在迭代集合时正在修改它。这是不允许的。您需要使用 for 循环并向后从集合中删除项目,或者如果可能的话,只需从集合中执行 RemoveAll! 【参考方案1】:我没有启用 On Delete Cascade,但我修改了 foreach 循环并且它可以工作
foreach (var w in db.WorkorderLogs.Where(x => x.SubmissionId == submission.Id))
db.WorkorderLogs.Remove(w);
【讨论】:
以上是关于与子记录一起删除记录的主要内容,如果未能解决你的问题,请参考以下文章