一个典型的记录同步任务

using System; using System.Collections.Generic; using System.Linq; using System.Text; using EC.Model; namespace EC_DataSync { class ECSyncProducePlan { public void Do() { var logId = 0L; try { #region WriteInfo("启动数据同步," + DateTime.Now); using (var ctx = DBCtx.GetCtx()) { WriteInfo("加载同步信息"); var it = ctx.EC_PlanSyncLog.Where(ent => ent.Status == "完成").OrderByDescending(ent => ent.RecId).Take(1).FirstOrDefault(); if (it == null) throw new Exception("未发现有效的前导记录!"); var maxPlsh = it.Plsh; #region 写同步日志 var syncLog = new EC_PlanSyncLog(); syncLog.BTime = DateTime.Now; syncLog.Status = "执行中..."; syncLog.AddTime = DateTime.Now; syncLog.Plsh = maxPlsh; ctx.EC_PlanSyncLog.AddObject(syncLog); ctx.SaveChanges(); logId = syncLog.RecId; #endregion WriteInfo(string.Format("检索Plsh>{0}的记录",it.Plsh)); var list = DownloadList(it); WriteInfo("发现" + list.Count + "条记录"); if (list.Count > 0) { maxPlsh= list.Max(ent => ent.Plsh); } int saveCount = 0; WriteInfo("保存数据..."); foreach (var item in list) { if (ctx.EC_ProducePlan.Any(ent => ent.Plsh == item.Plsh)) continue; var tInfo = new EC_ProducePlan(); AssignPlan(tInfo, item); ctx.EC_ProducePlan.AddObject(tInfo); saveCount++; if ((saveCount % 100) == 0) ctx.SaveChanges(); } ctx.SaveChanges(); WriteInfo("更新同步日志..."); syncLog.Status = "完成"; syncLog.ETime = DateTime.Now; syncLog.Plsh = maxPlsh.Trim(); ctx.SaveChanges(); } WriteInfo("完成," + DateTime.Now); #endregion } catch (Exception ex) { WriteInfo("错误:" + ex.Message); WriteErr(ex, logId); } } private void AssignPlan(EC_ProducePlan plan, p_productplan item) { plan.PlanID = item.PlanID; plan.P8code = item.P8code; plan.Pname = item.Pname; plan.PlanType = item.PlanType; plan.Ppname = item.Ppname; plan.Psetting = item.Psetting; plan.batno = item.batno; plan.P_yw = item.P_yw; plan.Poutput = item.Poutput; plan.Pdate = item.Pdate; //设置默认列 plan.Pweek1 = item.Pweek1; plan.Pplanner = item.Pplanner; plan.Pmanger = item.Pmanger; plan.Pcheckreust = item.Pcheckreust; plan.Pcheckdate = item.Pcheckdate; plan.Ptype = item.Ptype; plan.Pday1 = item.Pday1; plan.Plsh = item.Plsh; } private List<p_productplan> DownloadList(EC_PlanSyncLog it) { using (var ctx = DBCtx.GetMFGCtx()) { var list = ctx.p_productplan.Where(ent => string.Compare(ent.Plsh, it.Plsh, true) > 0).OrderBy(ent => ent.Plsh).Take(200).ToList(); return list; } } private void WriteErr(Exception ex, long logId) { try { using (var ctx = DBCtx.GetCtx()) { var it = ctx.EC_PlanSyncLog.FirstOrDefault(ent => ent.RecId == logId); if (it == null) return; it.Status = "完成_错误"; it.Msg = ex.Message; ctx.SaveChanges(); } } catch (Exception) { } } private void WriteInfo(string msg) { Console.WriteLine(msg); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2015-06-12 ardunio 实现RS485通讯-下位机