WCF Ria Services ChangeSet.GetOriginal (): Как это работает? - PullRequest
6 голосов
/ 15 октября 2010

У меня довольно простой вопрос, на который я не могу найти ответ. У меня есть приложение 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, но не могу найти никакой помощи. Мне кажется, что он пытается восстановить исходный объект на сервере, основываясь на изменениях, которые отправляются обратно с клиента на сервер.

Или, может быть, кто-нибудь знает лучший способ проверить, изменилось ли определенное свойство объекта во время обновления? Конечно, я могу сравнить его со значением в базе данных, но, похоже, мне следует избегать этого дополнительного вызова базы данных.

Любая помощь снова очень ценится: -)

EDIT: Только что узнал о атрибуте RoundTripOriginal. Это, кажется, делает трюк. Неужели я единственный, кто считает, что RIA может быть немного лучше задокументирована?

1 Ответ

3 голосов
/ 11 февраля 2011

Ну, я также искал способ отслеживания изменений сущности с помощью EF4, и после некоторого поиска в Google я обнаружил, что вам нужно применить атрибут "RoundTripOriginal" к свойствам сущности, которую вы хотите отслеживать, потому что RIA (по умолчанию) не отправляет исходные значения обратно на сервер.

У меня все еще есть некоторые проблемы по этому поводу, и я спросил некоторых гуру:

http://forums.silverlight.net/forums/t/218332.aspx

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

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

...