У меня есть веб-страница с формой, которая используется для редактирования какого-либо объекта. Этот объект содержит коллекцию других объектов, определенных следующим образом:
Public Overridable Property Employees As List(Of Employee)
В форме я могу удалить сотрудника, добавить нового или изменить существующего. Когда я нажимаю сохранить новые значения отправляются на сервер. На сервере я проверяю, существует ли пользователь. Если существует, то я изменяю его значения, если он не существует, я добавляю его. Все сотрудники, которые существуют на сервере и не были отправлены, помечаются как удаленные (состояние изменено на EntityState.Deleted). Я пытаюсь использовать следующий код (dbCollection = сущности базы данных, newCollection = коллекция отправлена из формы):
For Each item In dbCollection
Dim dbItem = item
Dim newTask = newCollection.FirstOrDefault(Function(i) i.Id = dbItem.Id)
If newTask Is Nothing Then
Me.Entry(item).State = EntityState.Deleted
Else
Me.Entry(item).CurrentValues.SetValues(newTask)
newCollection.Remove(newTask)
End If
Next
For Each item In newCollection
dbCollection.Add(item)
Next
Me.SaveChanges()
Этот код не работает, потому что изменение EntityState.Deleted удаляет объект из коллекции, и при каждом разрыве цикла, так как коллекция изменяется ...
Я знаю, что могу преодолеть эту проблему, используя цикл for или добавляя объекты для удаления в какой-то другой список, но я надеюсь, что, возможно, найдется шаблон, который сделает мой код лучше.
Заранее благодарим за все предложения.