При создании моих первых шагов в RIA Services (VS2010Beta2) и я встретились с этой проблемой: созданный Модель EF (никакой POCOs), универсальный репозиторий сверху его и Сервис RIA (размещенный в приложении MVC ASP.NET) и попробованный для получения данных из приложения MVC ASP.NET: работавший хорошо. Следующий шаг: клиент 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 типа 'Культура' не поддерживает операцию 'Редактирования'.
Я думал, что сделал что-то странное и испытанное, чтобы создать объект Культуры типа и присвоить значение ему: это работало хорошо!
Что я пропускаю? Я должен объявить EntitySet? Я должен отметить его? Я имею к... что?
Заранее спасибо
Оказывается, в классе DomainService нужно реализовать (или хотя бы обозначить "placeholder methods") как "Edit", "Delete",... например
[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).
Надеюсь, это пригодится кому-нибудь в будущем!