Обновление данных, полученных с помощью пользовательских методов служб RIA - PullRequest
1 голос
/ 18 августа 2011

На сегодняшний день все, что мне нужно было сделать со службами 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, чтобы их можно было зафиксировать, или мне нужно добавить настраиваемые методы добавления и обновления на стороне сервера для поддержки этого?

1 Ответ

1 голос
/ 20 августа 2011

Объекты, возвращаемые запросом, должны автоматически присоединяться к контексту домена.Вы должны иметь возможность их изменять и распространять эти изменения обратно на сервер, вызывая метод SubmitChanges в контексте домена.

Чтобы добавить новые объекты, вы можете добавить их в свойство Timeslots контекста домена.

В качестве альтернативы, если вы создаете связь между новым объектом и некоторым другим (не обязательно должен быть временным интервалом), то новый объект будет перетаскиваться в контекст домена и включаться в следующий вызов SubmitChanges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...