Подтвердить что ты не робот

Удаление дочерних объектов в Entity Framework

Я использую EF и когда я это делаю:

            foreach (var reg in detail.Regs)
            {
                this.db.Regs.DeleteObject(reg);
            }

Я получаю это:

Collection was modified; enumeration operation may not execute.

Что я делаю неправильно здесь?

4b9b3361

Ответ 1

Причина этого заключается в том, что при удалении объектов из контекста EF активно обновляет счетчик свойств навигации Regs, что означает, что коллекция detail.Regs изменяется во время цикла foreach, который всегда вызывает исключение, которое вы получаете.

Вы можете создать новый объект коллекции и удалить его из него следующим образом:

foreach (var reg in detail.Regs.ToList())
{
    this.db.Regs.DeleteObject(reg);
}

Или даже вы можете сделать его более чистым с помощью метода LINQ ForEach:

detail.Regs.ToList().ForEach(r => db.Regs.DeleteObject(r));