'收藏品已被修改'删除相关实体时出错

时间:2014-06-06 15:49:43

标签: c# linq entity-framework linq-to-entities

我正在尝试使用Entity Framework删除一些项目。我想删除DestinationId中不在int[] destinationIds内的foreach (var destination in product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId))) product.ImportedProductDestinations.Remove(destination); 项。 (我正在删除联结表中的行。)

foreach

但{{1}}语句给出了运行时错误:

  

收藏被修改;枚举操作可能无法执行。

好吧,我想我明白这个错误。但我怎么能做我想做的事呢?

4 个答案:

答案 0 :(得分:5)

不要从正在扫描的集合中删除该项目,将其从db上下文中删除

context.IMportedProductDestinations.DeleteObject(destination);

然后使用context.SaveChanges

将更改应用于db

答案 1 :(得分:2)

您收到异常是因为,您正尝试使用foreach迭代集合并从中删除项目。您可以将ToList添加到product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId)),然后移除该项。

foreach (var destination in product.ImportedProductDestinations
                                   .Where(ipd => !destinationIds.Contains(ipd.DestinationId))
                                   .ToList())
{
    product.ImportedProductDestinations.Remove(destination);
}

答案 2 :(得分:1)

当你在foreach中迭代它时,你不能从集合中删除一个项目。

var result = product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId)).ToList());

    For(int i= 0;i<result.count();i++)
    (
       product.ImportedProductDestinations.Remove(result[i]);
    )

答案 3 :(得分:1)

创建删除列表:

 foreach (var destination in product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId)))
     ListRemove.Add(ipd.DestinationId)

foreach (var remove in  ListRemove)
product.ImportedProductDestinations.Remove(remove)