C# 集合被修改为异常
我试图从C# 集合被修改为异常,c#,linq,entity-framework,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); }
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
我做错了什么?虽然这里没有直接说明,但问题通常是您使用的是
foreach
,它只能枚举项,不允许您直接操作集合。当Linq参与进来时,这种方法可能会变得有点暴躁
你可以用一个简单的
for
循环来代替你现有的,这个循环应该可以解决这个问题-但是,如果你不解决这个问题,这确实会带来另一个潜在的问题:你需要管理当前的索引,这个索引会被for
自动递增/递减,以免你会遇到“x下的问题” 虽然此处不明显,但问题通常是您使用的是foreach
,它只能枚举项,不允许您直接操作集合。当Linq参与进来时,这种方法可能会变得有点暴躁
你可以用一个简单的for
循环来代替你现有的,这个循环应该可以解决这个问题-但是,如果你不解决这个问题,这确实会带来另一个潜在的问题:你需要管理当前的索引,这个索引会被for
自动递增/递减,以免你会遇到“x下的问题” 这是“修改的闭包”恶魔。尝试这样做:
foreach (Nation thisNation in NationList)
{
var tempNation = thisNation;
Nation nation = nationDB.Nations.Where(c => c.ID == tempNation.ID).First();
nation.Duplicate(tempNation);
}
更多信息的好帖子。这是“修改的闭包”恶魔。尝试这样做:
foreach (Nation thisNation in NationList)
{
var tempNation = thisNation;
Nation nation = nationDB.Nations.Where(c => c.ID == tempNation.ID).First();
nation.Duplicate(tempNation);
}
好文章,提供了更多信息。我看不出这会有什么效果,因为“每个闭包”只使用一次(先调用实现查询)。我看不出这会有什么效果,因为“每个闭包”只使用一次(先调用实现查询)。只要看一看,这应该会起作用,你能把剪掉的代码扩展一点,包括
Duplicate()
和SaveChanges()
的实现吗?只要看一下,这应该行得通,你能把剪掉的代码扩展一点,包括Duplicate()
和SaveChanges()的实现吗
?即使我尝试使用您的方法和AJ方法,我仍然会遇到这个问题…您说问题发生在SaveChanges
上,这里的代码片段没有显示正在修改的集合-好的,我们可以看到更多的代码吗?类国家有字段:int-ID、字符串名称、列表区域。复制方法是逐个复制每个字段。我通过将值从nationList复制到集合来修改nationDB.Nations集合。这应该会影响数据库,对吧?即使是更简单的语法,比如nation.name=“test”在foreach循环中,当我调用SubmitChange时抛出异常我仍然遇到这个问题,即使我尝试使用您的和AJ方法…您说问题发生在SaveChanges
上,这里的代码片段没有显示正在修改的集合-好的,我们可以看到更多的代码吗?类Nation有字段:int ID,字符串名称,列出区域。复制方法是逐个复制每个字段。我通过将值从nationList复制到集合来修改nationDB.Nations集合。这应该会影响数据库,对吗?即使是更简单的语法,比如foreach循环中的nation.name=“test”,在调用SubmitChanges时也会引发异常