我有问题再次调用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=1
,Age = 16
。
然后运行应用程序,我以正确的方式获取数据。
然后转到数据库,使用SQL更新数据以更改Age = 20
。
然后返回应用并点击“刷新”按钮进行新的通话,但年龄未更新为20
,仍为16
。
我在调试模式下运行应用程序,并检查数据:
在检查点1,我检查结果中的数据,没问题,Age = 20
。
在检查点2,我检查result.Entities
中的数据,数据尚未刷新,仍然是Age = 16
。
我尝试了LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent
,但没有成功。
所以我需要刷新SL应用程序主机页面以重新加载整个SL应用程序,然后我可以看到新数据。这是最终用户无法接受的。
我不明白为什么。我还尝试使用fiddler在点击刷新按钮时捕获数据,数据确实获得了最新的Age = 20
。
如何解决此问题?
答案 0 :(得分:0)
首先,您是编辑模式的实体吗?如果您的实体处于编辑模式,RIA将保留您的更改,并仅在您再次加载实体时更新原始值。
您可以查看Person实体的IsEditing属性以查找。并尝试检查您的实体的OriginalValue。 var original = Person.GetOriginal()