代码改变世界

WCF RIA Services EntitySet 在Silverlight端的缓存问题

2012-03-16 11:29  starlet  阅读(453)  评论(0编辑  收藏  举报
//问题在子窗体中修改实体EdsNonstandardTaskItem的值并保存数据库后关闭子窗体刷新父页面数据

//客户端调用方法如下
var loadOp = _edsSoDC.Load<EdsNonstandardTaskItem>(_edsSoDC.GetEdsNonstandardTaskItemByContractGuidQuery(contractBaseInfo.ContractGuid));

//Load后通过调试服务端已经将数据修改提交的数据库且服务端的GetEdsNonstandardTaskItemByContractGuid方法确实返回了最新的数据然而客户端_edsSoDC.EdsNonstandardTaskItem中的数据仍为修改前的数据缓存问题

//解决方法:
//方法一:
//Load前将客户端的实体集合清空
_edsSoDC.EdsNonstandardTaskItems.Clear();

//方法二:
//对Load的方法进行修改


var loadOp = _edsSoDC.Load<EdsNonstandardTaskItem>(_edsSoDC.GetEdsNonstandardTaskItemByContractGuidQuery(contractBaseInfo.ContractGuid), LoadBehavior.RefreshCurrent, false);

//需要引入using System.ServiceModel.DomainServices.Client;
//LoadBehavior参考//
//指定加载实体时控制标识缓存行为。
//

//KeepCurrent
//缓存的实例未更改,且新读取的实例被丢弃。

//MergeIntoCurrent
//新读取实例的值将合并至属性值未修改的缓存实例。更改在该合并中不会丢失。

//RefreshCurrent
//将用来自新读取实例的当前值重写缓存实例的所有成员,无论这些值是否已修改。此外,实体的原始状///态还会设置成新读取实例。