Как обновить экземпляр объекта на стороне клиента с помощью службы wcf ria? - PullRequest
5 голосов
/ 03 декабря 2011

У меня проблема с повторным вызовом службы RIA WCF для обновления данных на стороне клиента.Вот мой случай:

На стороне сервера служба домена выглядит примерно так:

public IQueryable<Person> GetPersonByID(int id)
       {
           var result = this.ObjectContext.Persons.
               Where(e => e.PersonID == id);
           return result; // check point 1
       }

На стороне клиента я выполняю вызов следующим образом (это вызов кнопкойЯ вызвал кнопку «Обновить»):

this._amsService.Context.Load<Person>(
    this._amsService.Context.GetPersonByIDQuery(this.Person.ID),
    LoadBehavior.RefreshCurrent,
    result =>
    {
        this.Person = result.Entities.FirstOrDefault(); //check point 2
        this.RaisePropertyChanged("Person");     

    }, null);

Вот что я пытаюсь:

Предположим, у меня есть человек в БД с данными, скажем personID=1, Age = 16.

  1. Затем запустите приложение, я получу данные правильным способом.

  2. затем перейдите в базу данных, обновите данные с помощью SQL, чтобы изменить Age = 20.

  3. Затем вернитесь в приложение и нажмите кнопку «Обновить», чтобы сделать новый вызов, но возраст не обновляется до 20, он по-прежнему 16.

Я запускаю приложение в режиме отладки и проверяю данные:

В контрольной точке 1 проверяю данные в результате, все нормально, Age = 20.

В контрольной точке 2 я проверяю данные в result.Entities, данные не были обновлены, они все еще Age = 16.

Я пробовал LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent, но безуспешно.

Так что мне нужно обновить страницу хоста приложения SL, чтобы перезагрузитьПосле этого я могу увидеть новые данные.Это не приемлемо для конечных пользователей.

Я не понимаю, почему.Я также пытаюсь использовать fiddler для перехвата данных, когда нажимаю кнопку обновления, данные действительно получают самые последние Age = 20.

Как решить эту проблему?

1 Ответ

0 голосов
/ 21 ноября 2014

Прежде всего, вы находитесь в режиме редактирования?если ваша сущность находится в режиме редактирования, RIA сохранит ваши изменения и обновит исходные значения только после повторной загрузки сущности.

Вы можете проверить свойство IsEditing вашей сущности Person, чтобы узнать.и попробуйте проверить OriginalValue вашей сущности.var original = Person.GetOriginal ()

...