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

Ken*_*hou 5 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
       }
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的:

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

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

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

  3. 然后回到应用程序并单击"刷新"按钮进行新的呼叫,但是年龄未更新到20,它仍然是16.

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

在检查点1,我检查结果中的数据,没关系,Age = 20.

在检查点2,我检查数据result.Entities,数据没有刷新,它仍然是Age = 16.

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

因此,我需要刷新SL应用程序主机页面以重新加载整个SL应用程序,然后我可以看到新数据.这对最终用户来说是不可接受的.

我不明白为什么.我也尝试使用fiddler来点击刷新按钮时获取数据,数据确实得到了最新的数据Age = 20.

如何解决这个问题?

Joh*_*nny 0

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

您可以检查 Person 实体的 IsEditing 属性来找出答案。并尝试检查您的实体的 OriginalValue 。var 原始 = Person.GetOriginal()