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

本文关键字:检索 数据 自定义方法 服务 RIA 更新 | 更新日期: 2023-09-27 18:05:48

到目前为止,我需要用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上,以便提交它们,或者我是否需要在服务器端添加自定义的添加和更新方法来支持这一点?

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

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

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

或者,如果在新实体和其他实体(不需要是Timeslot)之间创建关系,则新实体将被拖到域上下文中,并包含在对SubmitChanges的下一次调用中