WCF Ria Services ChangeSet.GetOriginal(): Как это работает?
У меня довольно простой вопрос, на который я не могу найти ответ. У меня есть приложение Silverlight с Ria Services. В классе DomainService у меня есть метод обновления, как показано ниже:
public void UpdateConversationState(ConversationState currentConversationState)
{
var original = ChangeSet.GetOriginal(currentConversationState);
if (original != null)
ObjectContext.ConversationStatesRepository.AttachAsModified(currentConversationState, original);
else
ObjectContext.ConversationStatesRepository.Attach(currentConversationState);
currentConversationState.UpdDat = DateTime.Now;
if(original.Name != currentConversationState.Name)
//Do something extra
}
Проблема в том, что свойство Name всегда пусто. Фактически каждое поле, кроме Id, имеет значения по умолчанию. Я пытался найти, как работает метод GetOriginal, но не могу найти никакой помощи. Мне кажется, что он пытается восстановить исходный объект на сервере, основываясь на изменениях, которые отправляются обратно от клиента к серверу.
Или, может быть, кто-нибудь знает лучший способ проверить, изменилось ли определенное свойство объекта во время обновления? Конечно, я мог бы сравнить его со значением в базе данных, но, похоже, мне следует избегать этого дополнительного вызова базы данных.
Любая помощь снова очень ценится:-)
РЕДАКТИРОВАТЬ: Только что узнал о атрибуте RoundTripOriginalAttribute. Это, кажется, делает трюк. Неужели я единственный, кто считает, что RIA может быть немного лучше задокументирована?
1 ответ
Ну, я также искал способ отслеживания изменений сущности с помощью EF4, и после некоторого поиска в Google я обнаружил, что вам нужно применить атрибут "RoundTripOriginal" к свойствам сущности, которую вы хотите отслеживать, потому что RIA (по умолчанию) не отправляет исходные значения обратно на сервер.
У меня все еще есть некоторые проблемы по этому поводу, и я спросил некоторых из гуру:
http://forums.silverlight.net/forums/t/218332.aspx
Это сработало для меня, но я все еще не думаю, что это лучший выход из этого.
Надеюсь это поможет.