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