我有两个表 - QuestionOptions 和 Answers。两者之间存在多对多关系。我正在尝试删除与特定问题相关的 QuestionOptions,并且需要先删除答案。这是我的代码:
using (Survey_Context _context = new Survey_Context())
{
IQueryable<QuestionOption> questionOptions = _context.QuestionOptions.Where(qo => qo.QuestionID == questionID);
foreach (QuestionOption questionOption in questionOptions.ToList())
{
foreach (Answer answer in questionOption.Answers)
questionOption.Answers.Remove(answer);
_context.SaveChanges();
}
_context.QuestionOptions.RemoveRange(questionOptions.ToList());
_context.SaveChanges();
}
这会导致以下情况:
Error - System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
我在这里错过了什么?
请您参考如下方法:
您的代码中存在两个主要问题。
首先,导致您看到的无效操作异常的错误:
您正在尝试删除您正在迭代的列表的元素!
您不应该修改您正在枚举的列表(我的意思是:添加或删除元素)(使用 foreach,就像在您的代码中一样)。
这种方式根本无效。
其次,逻辑有误:
如果你想删除元素,那么你想从数据库上下文中删除这个对象,而不是从你刚刚创建的某个列表中删除它们。
正如评论中所建议的那样,您可以通过替换来一次更正这两个错误:
foreach (Answer answer in questionOption.Answers)
questionOption.Answers.Remove(answer);
由
_context.Answers.RemoveRange(questionOption.Answers);
