Отслеживание изменений службы данных WCF: как отменить сохранение изменений и вернуться к исходным значениям для объекта
У меня есть служба данных WCF, которая обертывает модель данных Entity Framework 4. Я подключаю клиента WPF к службе с помощью клиентской библиотеки WCF Data Services.
Возможно ли в службах данных WCF отменить / отменить изменения отслеживаемых объектов?
Сценарий: в пользовательском интерфейсе я разрешаю пользователю редактировать объект. У меня есть кнопки сохранения и отмены. Если пользователь выбирает сохранение, я вызываю SaveChanges() в моем контексте WCF, и изменения отправляются в базу данных через службу WCF. Если пользователь нажимает кнопку отмены, я хочу отменить изменения и вернуться к первоначальным значениям свойств текущего объекта.
Я знаю, что в клиентской библиотеке служб данных WCF встроено отслеживание изменений, но я не могу найти какой-либо способ доступа к этой информации.
В Entity Framework контекст поддерживает метод Refresh, и вы можете указать RefreshMode.StoreWins и передать объект - это эффективно отменит / отменит любые изменения. задокументировано здесь: http://msdn.microsoft.com/en-us/library/bb896255.aspx
Любые предложения о том, как я могу добиться того же в WCF DataServices в моем клиентском приложении?
ура Крис
2 ответа
Единственное "решение", о котором я знаю, это:
var oldMergeOption = _service.MergeOption;
_service.MergeOption = MergeOption.OverwriteChanges;
try {
_service.YourQueryable.Where(x => x.Id==oldObject.Id).Single();
} finally {
_service.MergeOption = oldMergeOption;
}
Это должно заменить значения "oldObject" значениями, хранящимися в БД. Однако я не уверен, что объект, возвращаемый функцией Single(), всегда будет таким же, как и "oldObject".
Обычно я воздерживаюсь от работы с объектами в DataServiceContext, пока не буду готов зафиксировать эти изменения в базе данных. Я не рассматриваю свои сущности как часть моей доменной модели, поэтому я создаю конкретную доменную модель, которая адаптирует мои объекты модели к объектным сущностям с помощью адаптеров и класса репозитория. Таким образом, все операции внутри доменной модели будут автономными, пока я не буду готов зафиксировать их в базе данных. Фантастическую статью от Бена Дея о том, на что я ссылаюсь, можно найти здесь: http://visualstudiomagazine.com/articles/2011/04/01/pfcov_silverlight-mvvm-tips.aspx