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

Это сработало для меня, но я все еще не думаю, что это лучший выход из этого.

Надеюсь это поможет.

Другие вопросы по тегам