【问题标题】:Deleting items in db using Entity Framework failing使用实体框架删除数据库中的项目失败
【发布时间】:2016-09-27 18:11:54
【问题描述】:

我在数据库中有一个名为 Course_Predecessor 的表,我正在尝试使用 EF 删除该表中的所有项目,然后将新数据添加到表中。 我无法删除数据,因为我收到以下错误:“collection was modified enumeration operation may not execute”

这是我正在使用的代码(在将 db 的上下文接收为 ctx 的函数内部)

List<Course_Predecessor> lst = new List<Course_Predecessor>();
fillTheList(ref lst , someData);

ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor.ToList());
ctx.Course_Predecessor.AddRange(predecessors);

我在 RemoveRange 函数中遇到错误。

将不胜感激。

【问题讨论】:

  • 如果您在没有任何周围代码的情况下执行ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor.ToList()); 会发生什么?这应该可以正常工作。

标签: c# database entity-framework asp.net-mvc-4 entity-framework-6


【解决方案1】:

你可以尝试如下:

ctx.Course_Predecessor.ToList().ForEach(c => ctx.Course_Predecessor.Remove(c));

【讨论】:

  • 它说 ForEach 没有定义
  • 抱歉,我错过了添加 .ToList()。请参阅我的更新答案。这应该适合你。
【解决方案2】:

如果您使用的是 EF6(看起来像),那么您应该能够通过执行以下操作来删除表中的所有记录。 (注意RemoveRange调用中没有.ToList()方法)

ctx.Course_Predecessor.RemoveRange(ctx.Course_Predecessor);
ctx.SaveChanges();

或者你可以这样做:

foreach (var predecessor in ctx.Course_Predecessor)
{
    ctx.Entry(predecessor).State = EntryState.Deleted;
}
ctx.SaveChanges();

两段代码的作用完全相同。

【讨论】:

  • 它仍然说收藏已被修改
  • @Adam 我认为RemoveRange 调用不会触发集合修改异常。我能够毫无问题地运行该确切代码。看起来您可能正在修改一个集合,同时在您使用相同数据上下文的代码的前一部分中枚举它。您是否可以更新您的问题以包含 fillTheList 方法的代码以及在您尝试从该表中删除所有记录然后调用 SaveChanges 之前执行的任何其他代码?
【解决方案3】:

试试这个,

 ctx.Course_Predecessor.ToList().ForEach(r => ctx.Course_Predecessor.DeleteObject(r));
 ctx.SaveChanges();

【讨论】:

  • 我没有修改元素。 lst 是我要插入到表中的新项目的列表(该函数只是在列表中插入值)然后我想删除所有表并插入新值
  • @Adam 你按照建议尝试了吗
  • 我不能尝试这个,因为它不适合我的情况我的朋友我确实需要这些行来插入新值
  • 立即尝试上述方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多