На сегодняшний день все, что мне нужно было сделать со службами RIA, было очень простым и могло быть сделано с использованием кода, сгенерированного на основе доменной модели. Однако теперь мне нужно иметь собственный метод на стороне сервера, который либо выполняет некоторую логику, либо вызывает хранимый процесс в базе данных. Я могу написать собственный метод на стороне сервера, чтобы получить отфильтрованные данные из нужной мне таблицы следующим образом:
public IQueryable<TIMESLOT> GetPermissableTimeslots(
int roomID,
int semesterID,
Int16 year)
{
return this.ObjectContext.TIMESLOTs.Where<TIMESLOT>(
ts =>
ts.ROOM_ID == roomID &&
ts.SEMESTER == semesterID &&
ts.YEAR == year
);
}
(Примечание: я в конечном итоге заменю запрос LINQ вызовом хранимого процесса, как только выясню текущие проблемы)
Visual Studio генерирует GetPermissableTimeslotsQuery на клиенте, который я могу использовать для загрузки данных следующим образом:
private void LoadPermissibleTimeSlots()
{
this.domainContext.Load(
domainContext.GetPermissableTimeslotsQuery(
this.CurrentRoom.ID,
this.CurrentSemester.ID,
this.CurrentYear),
(result) =>
{
this.Timeslots = result.Entities;
}
, null);
}
Теперь у меня проблема с добавлением и обновлением временных интервалов, которые пользователь меняет в клиенте. Поскольку полученный результат не является EntitySet и не связан напрямую с таблицей TIMESLOTS, я не могу просто обновить их в результирующем наборе сущностей и зафиксировать изменения. Нужно ли присоединять измененные сущности к EntitySet, связанному с таблицей TIMESLOTS, чтобы их можно было зафиксировать, или мне нужно добавить настраиваемые методы добавления и обновления на стороне сервера для поддержки этого?