Я работаю с EF4.1, RIA Services и Silverlight. У меня несколько странная проблема в сценарии обновления.
Модель предметной области довольно проста; он имеет дело с запросами и лицами. У них отношение 1 к n. Таким образом, Гражданин может иметь несколько Запросов, хотя на самом деле этого никогда не произойдет, поскольку приложение просто не предоставляет для этого функциональности.
Запрос имеет свойство "Срочно", которое я изменяю на true и затем пытаюсь сохранить. Все идет хорошо, пока не начнется фактическое сохранение с помощью этого метода:
public void UpdateRequest(Request currentRequest)
{
Request original = ChangeSet.GetOriginal(currentRequest);
try
{
ObjectContext.Requests.AttachAsModified(currentRequest, original);
}
catch (Exception ex)
{
// weirdness here!
}
}
который в значительной степени является стандартным методом, сгенерированным RIA Services (за исключением обработчика try/catch, который я добавил для целей отладки). Затем я получаю следующую ошибку:
Когда я проверяю ChangeSet, я не вижу никаких запросов для добавления, поэтому я уверен, что добавил его не случайно.
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
я не понимаю этого... В ObjectStateManager буквально нет добавленных объектов, в ChangeSet нет добавленных объектов; откуда, черт возьми, это идет? Я отслеживал, какие свойства изменяются, поэтому я уверен, что ключ не перезаписывается, не добавляется или еще какая-то приблуда.
Может ли кто-нибудь пролить свет здесь? Сводит меня с ума уже несколько дней...