博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight Client←→Server数据同步备忘代码
阅读量:5918 次
发布时间:2019-06-19

本文共 2713 字,大约阅读时间需要 9 分钟。

#region 同步单位void SyncUnit() {    ProgressContent = "正在同步单位...";    var query = Context.GetUnitsQuery().Where(p => p.ShopUniqueId == App.CurrentShop.UniqueId);    Context.Load(query, LoadUnitCallback, null);}void LoadUnitCallback(LoadOperation
loadOp) { //服务端数据 IEnumerable
serverUnits = Context.RP_Units; //客户端数据 IEnumerable
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

转载地址:http://vlfvx.baihongyu.com/

你可能感兴趣的文章
前台后台相互调用(js调用c# & c#调用js)
查看>>
[bzoj 4887] [Tjoi2017]可乐
查看>>
网络爬虫雏形1号
查看>>
SharePoint母版页使用网站的标题和地址
查看>>
Java中的字符串(转的,摘录)
查看>>
bean的继承,多态,引用
查看>>
memset()函数
查看>>
IntelliJ IDEA jrebel 实现热部署
查看>>
nodejs添加路由route步骤详解
查看>>
洛谷P1144 最短路计数
查看>>
【POJ1637】Sightseeing tour
查看>>
c++中的POD类型
查看>>
ServletConfig对象
查看>>
sql统计公司最高薪酬和薪酬分布
查看>>
JS中object与constructor的分析
查看>>
两个调片技巧
查看>>
echarts 认知笔记
查看>>
js 组合键监听ctrl + enter
查看>>
AMD:异步模块定义
查看>>
Asp.Net 网站访问人数及在线人数
查看>>