更新使用RIA服务自定义方法检索的数据

时间:2011-08-17 20:24:08

标签: c# silverlight ria wcf-ria-services

到目前为止,我需要处理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表关联,因此我不能只在结果实体集中更新它们并提交更改。我是否需要将更改的实体附加到与TIMESLOTS表关联的EntitySet以便可以提交它们,或者我是否需要在服务器端添加自定义添加和更新方法以支持此操作?

1 个答案:

答案 0 :(得分:1)

查询返回的实体应自动附加到域上下文。您应该能够修改它们,并通过在域上下文中调用SubmitChanges方法将这些更改传播回服务器。

要添加新实体,您可以将它们添加到域上下文的Timeslots属性中。

或者,如果您在新实体与其他实体之间创建关系(不需要是时间段),则新实体将被拖入域上下文并包含在下次调用SubmitChanges中。