我正在尝试从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。
我做错了什么?
答案 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。