我想在ObjectContext
上执行删除。
这是我的代码:
var tempList = someEntityObject.SomeCollectionOfEntityObject;
foreach (var item in tempList)
{
someObjectContext.DeleteObject(item);
tempList.Remove(item);
}
我想删除someEntityObject
,但在我可以之前,我需要删除SomeCollectionOfEntityObject
中的所有对象。我有一个外键约束,阻止我删除someEntityObject
。
当foreach尝试第二次循环时,我收到此错误:
System.InvalidOperationException occurred
Message=Collection was modified; enumeration operation may not execute.
答案 0 :(得分:3)
您可以先将集合填充到一些真实的临时列表中,而不是在tempList上使用foreach。
var realList = tempList.ToList();
然后清除tempList,然后可以遍历realList。
答案 1 :(得分:1)
改为使用while循环:
while(someEntityObject.SomeCollectionOfEntityObject.Count > 0)
{
someObjectContext.DeleteObject(someEntityObject.SomeCollectionOfEntityObject.First());
}
答案 2 :(得分:1)
另一种选择是在关系上指定级联删除。
这将导致删除someEntityObject时自动删除SomeCollectionOfEntityObject中的所有记录。
请注意,您必须在模型和数据库上执行此操作才能使其可靠地工作。有关详情,请参阅此帖子:http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx。