集合被修改了异常

时间:2011-03-21 17:18:31

标签: c# linq entity-framework

我正在尝试从DataContext对象查询名为“Nations”的数据表,并在调用SubmitChanges()时收到以下异常:

  

收藏被修改;枚举操作可能无法执行

以下是代码片段:

foreach (Nation thisNation in NationList)
{
    Nation nation = nationDB.Nations.Where(c => c.ID == thisNation.ID).First();
    nation.Duplicate(thisNation);
}

其中Duplicate()是复制Nation对象的某些属性的方法:

我正在使用EF和CTP5。

我做错了什么?

2 个答案:

答案 0 :(得分:4)

虽然这里没有直接明显,但问题通常在于您使用的foreach只能枚举项目,并且不允许您直接操作集合。当Linq参与时,这种方法可能会变得更加不稳定。

你可以用一个简单的for循环代替你所拥有的东西来解决问题 - 然而,如果你不解决这个问题,这确实会打开另一个潜在的问题:你需要自动管理当前的索引由for递增/递减,以免你得到'x-off-by问题'。

答案 1 :(得分:1)

这是“修改后的封闭”恶魔。试着这样做:

foreach (Nation thisNation in NationList)
{
    var tempNation = thisNation;
    Nation nation = nationDB.Nations.Where(c => c.ID == tempNation.ID).First();
    nation.Duplicate(tempNation);
}

包含更多信息的好帖here

相关问题