【发布时间】:2016-05-12 03:16:52
【问题描述】:
我需要更新一个对象列表,每个对象都有一个子对象列表。当我尝试将子对象添加到数据库上下文时,我收到一条错误消息,提示“集合已修改,枚举操作可能无法执行”。我试过改变 ToList() 但这没有帮助。这是一个示例:
public void Update(List<Parent> parents)
{
// I've made this a FOR loop instead of FOREACH - doesn't help
for (int i = 0; i < parents.Count; i++)
{
var parent = parents[i];
var dbEntry = _db.Entry(parent);
dbEntry.State = EntityState.Modified;
foreach (var child in dbEntry.Entity.Children)
if (!parent.Children.Exists(ent => ent.Id == child.Id))
_db.Children.Remove(child);
foreach (var child in parent.Children)
if (child.Id == 0)
dbEntry.Entity.Children.Add(child); <-- ENUMERATION ERROR HERE
}
context.SaveChanges();
}
我到处寻找答案,但找不到这个答案。我尝试修复它的每一种方法最终都会得到相同的结果。有什么想法吗?
【问题讨论】:
-
您的问题可能与 EF6 无关;它可能与
foreach是一个只读循环有关...您遇到的错误是修改当前由foreach操作枚举的任何集合的典型错误。你可以使用for循环代替内部循环吗? -
@CoolBots 我认为修改您正在迭代的集合实际上可能是一个天生的坏主意。 OP,你提到使用 ToList();你在哪里用的?
-
@Ed Plunkett,我一般同意,只是试图解决可能是 OP 错误的直接原因。
标签: c# entity-framework linq