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.
然后运行应用程序,我以正确的方式获取数据.
然后转到数据库,用SQL更新数据进行更改Age = 20.
然后回到应用程序并单击"刷新"按钮进行新的呼叫,但是年龄未更新到20,它仍然是16.
我在调试模式下运行应用程序,并检查数据:
在检查点1,我检查结果中的数据,没关系,Age = 20.
在检查点2,我检查数据result.Entities,数据没有刷新,它仍然是Age = 16.
我试过了LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent,但没有成功.
因此,我需要刷新SL应用程序主机页面以重新加载整个SL应用程序,然后我可以看到新数据.这对最终用户来说是不可接受的.
我不明白为什么.我也尝试使用fiddler来点击刷新按钮时获取数据,数据确实得到了最新的数据Age = 20.
如何解决这个问题?
首先,您的实体是否处于编辑模式?如果您的实体处于编辑模式,RIA 将保留您的更改,并且仅在您再次加载实体时更新原始值。
您可以检查 Person 实体的 IsEditing 属性来找出答案。并尝试检查您的实体的 OriginalValue 。var 原始 = Person.GetOriginal()
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |