惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
罗磊的独立博客
F
Fortinet All Blogs
T
Threatpost
Y
Y Combinator Blog
博客园_首页
美团技术团队
Security Latest
Security Latest
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
V
V2EX - 技术
The Cloudflare Blog
L
LINUX DO - 热门话题
博客园 - 司徒正美
Jina AI
Jina AI
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
Cybersecurity and Infrastructure Security Agency CISA
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
The Hacker News
The Hacker News
P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
M
MIT News - Artificial intelligence
Latest news
Latest news
NISL@THU
NISL@THU
Google DeepMind News
Google DeepMind News
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cisco Blogs
雷峰网
雷峰网
Application and Cybersecurity Blog
Application and Cybersecurity Blog
B
Blog RSS Feed
W
WeLiveSecurity
D
DataBreaches.Net
G
Google Developers Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
Spread Privacy
Spread Privacy
Know Your Adversary
Know Your Adversary
TaoSecurity Blog
TaoSecurity Blog
S
Securelist
Help Net Security
Help Net Security

博客园 - 紫色永恒

一段旅程的结束和另一端旅程的开始 Expression Blend 5 Preview For Silverlight5 RC已发布 Siverlight5新功能/改进总结 [译]WCF RIA Services中的集合(2) [译]WCF RIA Services中的集合(1) Silverlight通过MVVM实现多语言实时切换(含源代码) Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service) 你应该知道的,那些未在Silverlight5Beta中出现的特性 记录来敦煌一周的情况 Silverlight奇技银巧7 - 巧用文件生成时间强制客户端载入最新xap文件 - 紫色永恒 [ASP.NET MVC3]Chart的ActionResult扩展 - 紫色永恒 如何将ASP.NET MVC2项目升级到MVC 3 RC Silverlight 4 GDR 1 更新 - 紫色永恒 Silverlight奇技银巧6 - UserControl的继承 - 紫色永恒 Silverlight 4 Training Kit更新 - 紫色永恒 Silverlight4的DataGrid改进与Toolkit2010.4中的新玩意 - 紫色永恒 Win03+IIS6部署.NetFramework4(ASP.NET4)的一点小经验 - 紫色永恒 4.13 Silverlight4 Will Come - 紫色永恒 Silverlight4RC的API汇总(文本文件) - 紫色永恒
Silverlight Client←→Server数据同步备忘代码
紫色永恒 · 2011-12-24 · via 博客园 - 紫色永恒
#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