Проблема в том, что вы добавляете новые элементы до того, как старые будут удалены.
Linq-to-SQL имеет четко определенный порядок операций при вызове SubmitChanges()
(вам также следует обязательно использовать SubmitChanges()
- не Save()
!):
* Inserts
* Updates
* Deletes
(для справки см. здесь и здесь )
Проблема здесь в том, что вы, кажется, добавляете обратно дочерние узлы, которые имеют те же ключи, что и те, которые вы удаляете при вызове DeleteAllOnSubmit()
.
Но так как ВСТАВКА новых элементов происходит перед удалением, у вас возникает конфликт.
Что вам нужно сделать, это одна из двух вещей:
- либо вы удаляете дочерние узлы, а затем вызываете
SubmitChanges()
до , снова добавляя новые элементы
OR
- вы изменяете свою логику, чтобы дочерние узлы, которые все еще существуют, сначала не удалялись, а затем снова добавлялись; измените свою логику на только удалить те элементы, которые действительно удалены (и не добавлены обратно), и вставьте только те, которые действительно новые
С помощью любого из этих двух шагов вы должны заставить вашу систему работать.
Марк