2010-11-11 152 views
29

我使用EF和当我这样做:删除子在实体框架对象

  foreach (var reg in detail.Regs) 
      { 
       this.db.Regs.DeleteObject(reg); 
      } 

我得到这个:

Collection was modified; enumeration operation may not execute. 

什么我是我做错了什么???

回答

80

的原因是因为你从上下文中删除对象,EF正在积极更新的REG导航属性计数,这意味着detail.Regs的的foreach循环期间收集正在改变总是导致你得到的例外。

您可以创建一个新的集合对象,并保持从中删除这样的:

foreach (var reg in detail.Regs.ToList()) 
{ 
    this.db.Regs.DeleteObject(reg); 
} 

甚至可以使用LINQ 的ForEach方法使得清洁:

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r)); 
+0

感谢你这么很多...哟是明星.... :) – Shaz 2014-02-07 16:25:38

+0

从数据库中获取所有记录只是为了让他们删除不是? – Marco 2015-12-02 18:09:40