如何使用wcf ria服务刷新客户端实体的实例?

时间:2011-12-03 19:00:49

标签: silverlight-4.0 wcf-ria-services

我有问题再次调用WCF RIA服务来刷新客户端的数据。这是我的情况:

在服务器端,域服务类似于:

public IQueryable<Person> GetPersonByID(int id)
       {
           var result = this.ObjectContext.Persons.
               Where(e => e.PersonID == id);
           return result; // check point 1
       }

在客户端,我按以下方式拨打电话(这是通过一个名为“刷新”按钮的按钮来调用):

this._amsService.Context.Load<Person>(
    this._amsService.Context.GetPersonByIDQuery(this.Person.ID),
    LoadBehavior.RefreshCurrent,
    result =>
    {
        this.Person = result.Entities.FirstOrDefault(); //check point 2
        this.RaisePropertyChanged("Person");     

    }, null);

以下是我正在尝试的内容:

假设我在数据库中有一个人,其数据为personID=1Age = 16

  1. 然后运行应用程序,我以正确的方式获取数据。

  2. 然后转到数据库,使用SQL更新数据以更改Age = 20

  3. 然后返回应用并点击“刷新”按钮进行新的通话,但年龄未更新为20,仍为16

    < / LI>

    我在调试模式下运行应用程序,并检查数据:

    在检查点1,我检查结果中的数据,没问题,Age = 20

    在检查点2,我检查result.Entities中的数据,数据尚未刷新,仍然是Age = 16

    我尝试了LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent,但没有成功。

    所以我需要刷新SL应用程序主机页面以重新加载整个SL应用程序,然后我可以看到新数据。这是最终用户无法接受的。

    我不明白为什么。我还尝试使用fiddler在点击刷新按钮时捕获数据,数据确实获得了最新的Age = 20

    如何解决此问题?

1 个答案:

答案 0 :(得分:0)

首先,您是编辑模式的实体吗?如果您的实体处于编辑模式,RIA将保留您的更改,并仅在您再次加载实体时更新原始值。

您可以查看Person实体的IsEditing属性以查找。并尝试检查您的实体的OriginalValue。 var original = Person.GetOriginal()