Сервисы 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? Должен ли я отмечать его? Должен ли я... что?
Заранее спасибо
Ответы
Ответ 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 доступны).
Надеюсь, это будет полезно для кого-то в будущем!