Изменена коллекция Entity Framework; операция перечисления может не выполняться
В настоящее время я использую EF 4.0. Моя цель - удалить дочернюю коллекцию и добавить новые те же родительские.
public void AddKids(int parentId, Kids newKids)
{
using (ModelContainer context = new ModelContainer(connectionString))
{
using (TransactionScope scope = new TransactionScope())
{
var query = from Parent _parent in context.Parents
where _parent.ParentId == parentId select _parent;
Parent parent = query.Single();
while (parent.Kids.Any())
{
context.Kids.DeleteObject(parent.Kids.First());
}
if (newKids != null)
{
foreach (Kid _kid in newKids)
{
parent.Kids.Add(new Kid
{
Age = _kid.Age,
Height = _kid.Height
});
}
}
scope.Complete();
}
context.SaveChanges(); //Error happens here
}
}
Ошибка имеет название: коллекция была изменена; операция перечисления не может выполняться.
Любая помощь будет оценена.
Ответы
Ответ 1
Вы видите это, потому что вы удаляете объекты из коллекции, в которой в настоящее время действуют активные операции. Более конкретно, вы обновляете коллекцию Kids, а затем выполняете оператор Any() на ней в цикле while. Это не поддерживается при работе с экземплярами IEnumerable. То, что я могу вам посоветовать, - это переписать свое время следующим образом:
parent.Kids.ToList().ForEach(r => context.Kids.DeleteObject(r));
Я надеюсь, что это поможет.