Самостоятельное отслеживание наборов сущностей и сравнение изменений - PullRequest
1 голос
/ 18 января 2011

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

AcceptChanges не может продолжаться, поскольку значения ключей объекта конфликтуют с другим объектом в ObjectStateManager. Убедитесь, что значения ключей уникальны, прежде чем вызывать AcceptChanges.

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

1 Ответ

0 голосов
/ 18 января 2011

Это не предполагаемый способ использования STE.В STE много логики, но они не способны обрабатывать дубликаты ключей, привязанные к контексту .

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

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