Вот мой сценарий:
Я использую объекты Silverlight, RIA и POCO (без Entity Framework; мы работаем против Oracle и SP).
У меня есть родительский объект, который содержит коллекцию дочерних объектов. Я правильно настроил атрибуты Ассоциации и Композиции на Родителе. Когда я хочу сохранить изменения, весь граф объектов отправляется на сервер правильно.
Пользователь может добавить один или несколько дочерних объектов в родительский.
Теперь, если пользователь добавляет ОДИН дочерний объект в родительский и сохраняет его, тогда все работает. Однако, когда пользователь пытается добавить ДВА или более новых объектов в Parent, а затем продолжает работу, я получаю классическую ошибку:
System.ServiceModel.DomainServices.Client.DomainOperationException: операция отправки не удалась. Сущность с такой же идентичностью уже существует в этом EntitySet. ---> System.InvalidOperationException: объект с таким же идентификатором уже существует в этом EntitySet.
Теперь, это сбой на клиенте. Я отслеживаю все - база данных фактически обновляется! Все правильно отправляется на сервер, обновляется БД. Я проверяю ключи объектов на сервере, когда повторный запрос происходит, и они верны - все новые дочерние объекты обновляют свои идентификаторы от нуля до действительного числа в последовательности.
Это когда я получаю перезагрузить родительский объект на клиенте, я получаю эту ошибку. Я не понимаю Я обновляю новый контекст для операции повторной загрузки; он должен быть пустым и просто загружать Родителя и связанных с ним детей. Я проверяю данные на стороне сервера, прежде чем они выйдут из метода запроса - родительские и дочерние данные в порядке. Так что же происходит? Почему мой контекст раздражает, что я не могу выполнить эту операцию?