微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有问题再次调用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);

这是我正在尝试的:

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

>然后运行应用程序,我以正确的方式获取数据.
>然后转到数据库,使用sql更新数据以更改Age = 20.
>然后返回应用并单击“刷新”按钮进行新呼叫,但年龄未更新为20,仍为16.

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

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

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

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

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

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

如何解决这个问题?

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐