Обновить запись в базе данных с помощью служб данных WCF

#wcf #wcf-data-services

#wcf #wcf-data-services

Вопрос:

Я пытаюсь использовать службы данных WCF, и я немного запутался в том, где я ошибаюсь, пытаясь обновить запись на основе значения ключевого поля.
Мой упрощенный подход, который не работает:

  MydbEntities context = new MydbEntities(new Uri("http://localhost:53051/Services/MydbService.svc"));
 MyEntity avt = context.MyTable.Where(p => p.EntID == "val1").FirstOrDefault();
 avt.FieldToEdit = 1;
 context.UpdateObject(avt);
 context.BeginSaveChanges(OnChangesSaved, context);
 ...
 private void OnChangesSaved(IAsyncResult result)
 {            
     MessageBox.Show("seems ok");//I'm getting this message, but, in fact, data in db remains unchanged
 }
  

Пожалуйста, скажите мне, где я не прав?

Ответ №1:

Я нашел причину проблемы. Это было тривиально (я чувствую себя идиотом), в инициализаторе службы не было установлено прав доступа на запись. Произошло следующее:

 public static void InitializeService(DataServiceConfiguration config)
{
    config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
      ...
}
  

после того, как я изменил ее на:

 config.SetEntitySetAccessRule("*", EntitySetRights.All);
  

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

Ответ №2:

В вашем обработчике OnChangesSaved вам нужно вызвать context.EndSaveChanges(result) .

По этой ссылке приведен пример кода, иллюстрирующий весь процесс.

Комментарии:

1. Спасибо. Я пытался, но проблема в том, что при попытке вызвать это, я получаю ошибку времени выполнения: An error occurred while processing this request.