Подтвердить что ты не робот

Сервисы RIA EntitySet не поддерживают операцию "Изменить"

Первые шаги в RIA Services (VS2010Beta2), и я столкнулся с этой проблемой: создал EF-модель (без POCOs), общий репозиторий поверх нее и службу RIA (размещенную в приложении ASP.NET MVC) и попытался получить данные из приложения ASP.NET MVC: хорошо работал. Следующий шаг: клиент Silverlight. Получил ссылку на RIAService (через свой контекст), запросил для всех записей репозитория и также получил их в SL-приложении (используя этот пример кода):

private ObservableCollection<Culture> _cultures = new ObservableCollection<Culture>();
public ObservableCollection<Culture> cultures
{
  get { return _cultures; }
  set
  {
    _cultures = value;
    RaisePropertyChanged("cultures");
  }
}

....

//Get cultures            
EntityQuery<Culture> queryCultures = from cu in dsCtxt.GetAllCulturesQuery()
                                             select cu;
loCultures = dsCtxt.Load(queryCultures);
loCultures.Completed += new EventHandler(lo_Completed);

....

void loAnyCulture_Completed(object sender, EventArgs e)
{
  ObservableCollection<Culture> temp= 
  new ObservableCollection<Culture>loAnyCulture.Entities);
                AnyCulture = temp[0];
}

Проблема заключается в следующем: всякий раз, когда я пытаюсь редактировать некоторые данные записи (в этом примере первая запись), я получаю эту ошибку: Этот EntitySet типа "Культура" не поддерживает операцию "Изменить".

Я думал, что сделал что-то странное и попытался создать объект типа Culture и присвоить ему значение: он работал хорошо!

Что мне не хватает? Должен ли я объявлять EntitySet? Должен ли я отмечать его? Должен ли я... что?

Заранее спасибо

4b9b3361

Ответ 1

Оказывается, что в классе DomainService необходимо реализовать (или, по крайней мере, пометить "методы-заполнители" ) как "Edit", "Delete",... eg

[Delete]
public void DeleteCulture(Culture currentCulture)
{
   throw new NotImplementedException("UpdateCulture not Implemented yet");
}
[Insert]
public void InsertCulture(Culture newCulture)
{
   throw new NotImplementedException("InsertCulture not Implemented yet");
}

Таким образом, класс OrganizationDomainContextEntityContainer создает EntitySet с параметром EntitySetOperations.All(что означает, что все операции CUD доступны).

Надеюсь, это будет полезно для кого-то в будущем!