Silverlight Client←→Server数据同步备忘代码
2011-12-24 01:56
344 查看
#region 同步单位 void SyncUnit() { ProgressContent = "正在同步单位..."; var query = Context.GetUnitsQuery().Where(p => p.ShopUniqueId == App.CurrentShop.UniqueId); Context.Load(query, LoadUnitCallback, null); } void LoadUnitCallback(LoadOperation<RP_Unit> loadOp) { //服务端数据 IEnumerable<RP_Unit> serverUnits = Context.RP_Units; //客户端数据 IEnumerable<RP_Unit> clientUnits; //获取数据 using (var helper = new LocalDb.UnitHelper()) { clientUnits = helper.GetList(); } //获取交集用来同步已存在且需要更新的实体 var intersectUnits = serverUnits.Intersect(clientUnits, new UnitEntityCompare()); //遍历交集集合 foreach (var item in intersectUnits) { // 根据交集的项目分别获取服务端及客户端需要更新的数据 var serverUnitToUpdate = serverUnits.First(p => p.UniqueId == item.UniqueId); var clientUnitToUpdate = clientUnits.First(p => p.UniqueId == item.UniqueId); // 根据更新时间进行比较,如果相同则忽略操作 if (clientUnitToUpdate.UpdateDate != serverUnitToUpdate.UpdateDate) { //如果服务端较新,则更新客户端 if (clientUnitToUpdate.UpdateDate < serverUnitToUpdate.UpdateDate) { using (var helper = new LocalDb.UnitHelper()) { helper.UpdateUnit(serverUnitToUpdate); } } //否则更新服务端 else { serverUnitToUpdate.UpdateDate = clientUnitToUpdate.UpdateDate; serverUnitToUpdate.NameCN = clientUnitToUpdate.NameCN; serverUnitToUpdate.NameEN = clientUnitToUpdate.NameEN; } } } //获取服务端与客户端的差集用来同步服务端或客户端不存在的实体 var exceptServer = serverUnits.Except(clientUnits, new UnitEntityCompare()); //遍历差集集合 //由于要修改集合,所以不使用foreach for (int i = 0; i < exceptServer.Count(); i++) { var item = exceptServer.ElementAt(i); //如果本地最后更新时间在数据的更新时间之前,则向客户端添加该数据 if (!clientShopInfo.LastUpdateDate.HasValue || clientShopInfo.LastUpdateDate < serverShopInfo.LastUpdateDate) { using (var helper = new LocalDb.UnitHelper()) { helper.AddUnit(item); } } //否则说明数据已从本地库删除,同时从服务端数据库删除 else { Context.RP_Units.Remove(item); } } //获取服务端与客户端的差集用来同步服务端或客户端不存在的实体 var exceptClient = clientUnits.Except(serverUnits, new UnitEntityCompare()); //遍历差集集合 //由于要修改集合,所以不使用foreach foreach (var item in exceptClient) { //如果本地最后更新时间在数据的更新时间之前,则从客户端移除该数据 if (clientShopInfo.LastUpdateDate < serverShopInfo.LastUpdateDate) { using (var helper = new LocalDb.UnitHelper()) { helper.DeleteUnit(item); } } //否则说明将客户端数据添加到服务端 else { Context.RP_Units.Add(item); } } SyncOperations.Remove("Unit"); } #endregion
相关文章推荐
- linux和windows同步数据 cwrsync client to rsync server
- 一种client同步server数据的方案
- 多Client同步Server端数据
- 分布式数据库数据从属与client与server的数据同步
- linux和windows同步数据 cwrsync client to rsync server
- novaclient代码解析之---通过nova show <server-id>命令解析Nova client与Nova API之间的调用关系
- Client:TSocketConnection 和Server: Scktsrvr关系----压缩数据传输方案
- (备忘)devexpress 中 在客户端事件(javascript)中,设置不执行服务器端代码的语句 e.processOnServer = true
- 基于linked server的scorm课件播放器数据同步从sqlserver->oracle
- mongodb数据同步问题 Logstream::get called in uninitialized state Fri May 11 04:12:55 ERROR: Client::~Clien
- Androidclient和server第一种方法端数据交换
- uip UDP server广播模式(client能够随意port,而且主动向client发送数据)
- Vue-cli 使用json server在本地模拟请求数据的示例代码
- DNS Tunneling及相关实现——总之,你发起攻击都需要一个DNS server,下载一些工具作为client发起数据,server收集数据并响应
- Windows 之间用rsync同步数据(cwRsyncServer配置)
- TCPServer与Client的通信代码
- 遍历数据表追加到汇总表(ACCESS 自写代码备忘)
- httpcomponents-client-4.3.3和jdk1.6 httpserver通过http协议交互数据
- winform程序三个窗体间同步数据(五):接口实现多态减少代码(观察者模式)
- SQL Server 复制 - 发布订阅(SQL Server 数据同步)