2011-01-18 2 views
1

Im делает .net-приложение как проект моего университета и у меня проблема с наборами самонаблюдения. Я выбираю запись, передавая ее через службу wcf, вношу некоторые изменения и передаю ее на сервер снова. Там я хочу сравнить то, что было изменено, поэтому я выбираю одну и ту же запись из контекста один раз снова (это запись со старыми значениями) и сравнивая. Затем, после сравнения я хочу вызвать ApplyChanges от контекста с лицом, прошедшим через службу, и Im получает сообщение об ошибке:Самостоятельное отслеживание сущностей Наборы и сравнение изменений

AcceptChanges cannot continue because the object's key values conflict with another object in the ObjectStateManager. Make sure that the key values are unique before calling AcceptChanges.

Я предполагаю, что это из-за загрузки и ту же сущность дважды (до изменения и после изменения для сравнения). Есть ли лучший способ сравнить изменения (мне нужно сделать историю изменений в другой таблице db)? И разве эта ошибка не возникнет, если два клиента получат одну и ту же запись, а первая изменит ее и хочет сохранить в db? Я использую .net 4.0.

+0

передать DTO на службу WCF и сэкономить много боли и волос. –

ответ

0

Это не предполагается использование STE. STE завершают много логики, но они не могут обрабатывать duplicate keys attached to context.

Так что я могу представить себе два решения:

  • Не загружать объект для сравнения изменений. Вместо этого примените изменения из своего STE и обработайте событие SavingChanges (или переопределите SaveChanges в контексте), чтобы получить прикладные изменения от ObjectStateManager.
  • Попробуйте установить detach объект, прежде чем применять изменения из STE.

 Смежные вопросы

  • Нет связанных вопросов^_^