如何从ObjectContext中删除属于EntityObjects集合的EntityObject?

时间:2012-01-25 11:49:36

标签: c# .net entity-framework objectcontext

我想在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.

3 个答案:

答案 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