/// <summary> /// 处理同步教师信息 /// 此方法分别更新四张表,分别是:School_Teachers,Sys_User,Sys_User_Role,Sys_UserLogOn /// </summary> public void ProcessTeacher() { Console.WriteLine("南航项目:开始同步教师信息 --> " + DateTime.Now.ToLocalTime()); var sw = new Stopwatch(); sw.Start(); var newDb = new NHModel(); var oldDb = new NanHangAccept(); ///--------- Step1: 更新 School_Teachers 表数据 ---------/// ProcessSchoolTeacherInfo(oldDb, newDb); ///--------- Step2: 更新 Sys_User 表数据 ---------/// ProcessSchoolTeacherSysUser(oldDb, newDb); ///--------- Step3: 更新 Sys_User_Role 表数据 ---------/// ProcessSchoolTeacherSysUserRole(oldDb, newDb); ///--------- Step4: 更新 Sys_UserLogOn 表数据 ---------/// ProcessSchoolTeacherSysUserLogON(oldDb, newDb); //newDb.BulkDelete(newDb.TeacherInfoes.ToList()); //删除中间表的所有教师数据 newDb.Dispose(); oldDb.Dispose(); sw.Stop(); Console.WriteLine("南航项目:同步教师信息结束 --> 合计耗时:" + sw.ElapsedMilliseconds / 1000 + "s"); }
/// <summary> /// 处理同步学生信息 学生信息同步6张表 /// 分别为: School_Students,Sys_User,Sys_User_Role,Sys_UserLogOn,Dorm_DormStudent,Dorm_Dorm /// </summary> public void ProcessStudent() { Console.WriteLine("南航项目:开始同步学生信息 --> " + DateTime.Now.ToLocalTime()); var sw = new Stopwatch(); sw.Start(); var newDb = new NHModel(); var oldDb = new NanHangAccept(); ///--------- Step1: 更新 School_Students 表数据 ---------/// ProcessSchoolStudentInfo(oldDb, newDb); Console.WriteLine(" *** 同步 School_Students 结束 。"); ///--------- Step2: 更新 Sys_User 表数据 ---------/// ProcessSchoolStudentSysUser(oldDb, newDb); Console.WriteLine(" *** 同步 Sys_User 结束 。"); ///--------- Step3: 更新 Sys_User_Role 表数据 ---------/// ProcessSchoolStudentSysUserRole(oldDb, newDb); Console.WriteLine(" *** 同步 Sys_User_Role 结束 。"); ///--------- Step4: 更新 Sys_UserLogOn 表数据 ---------/// ProcessSchoolStudentSysUserLogOn(oldDb, newDb); Console.WriteLine(" *** 同步 Sys_UserLogOn 结束 。"); ///--------- Step5: 更新 Dorm_Dorm 表数据 ---------/// ProcessSchoolStudentDormInfo(oldDb, newDb); Console.WriteLine(" *** 同步 Dorm_Dorm 结束 。"); ///--------- Step6: 更新 Dorm_DormStudent 表数据 ---------/// ProcessSchoolStudentSysUserDormStudent(oldDb, newDb); Console.WriteLine(" *** 同步 Dorm_DormStudent 结束 。"); //newDb.BulkDelete(newDb.StudentInfoes.ToList()); //批量删除中间表的所有数据 newDb.Dispose(); oldDb.Dispose(); sw.Stop(); Console.WriteLine("南航项目:同步学生信息结束 --> 合计耗时:" + sw.ElapsedMilliseconds / 1000 + "s"); }
/// <summary> /// 处理同步组织机构信息(学生组织结构) /// </summary> public void ProcessOrgInfoStu() { Console.WriteLine("开始同步组织机构信息: 南航项目 --> " + DateTime.Now.ToLocalTime()); var sw = new Stopwatch(); sw.Start(); //校方数据集(分为两种:修改数据和新增数据) var newDb = new NHModel(); var newData = newDb.OrganizationInfo_stu.Select(p => new Sys_Organize { F_Id = p.OrgId, F_FullName = p.OrgName, F_ParentId = p.ParentOrgId, F_CreatorTime = p.CreatedTime, F_LastModifyTime = p.LastUpdatedTime, F_EnCode = p.OrgId, F_DeleteMark = false }).ToList(); //获取生产环境数据库数据集 var oldDb = new NanHangAccept(); //var oldData = oldDb.Sys_Organize.Select(p => new Sys_Organize { F_Id = p.F_Id, F_FullName = p.F_FullName, F_ParentId = p.F_ParentId, F_CreatorTime = p.F_CreatorTime, F_LastModifyTime = p.F_LastModifyTime }).ToList(); var oldData = oldDb.Sys_Organize.ToList(); var interList = newData.Intersect(oldData).ToList(); //取交集 (不作任何操作) oldData = oldData.Except(interList).ToList(); //将交集从内存删除,以节省内存空间并减少循环次数 newData = newData.Except(interList).ToList(); var addList = newData.Except(oldData).ToList(); //取差集 (新增和修改数据) var idList = oldData.Select(p => p.F_Id).ToList(); var endList = new List <Sys_Organize>(); foreach (var org in addList) { if (org.F_ParentId == null) { org.F_ParentId = "2"; } if (idList.Contains(org.F_Id)) { oldDb.Set <Sys_Organize>().Where(p => p.F_Id == org.F_Id).Update(p => new Sys_Organize { F_ParentId = org.F_ParentId, F_FullName = org.F_FullName, F_CreatorTime = org.F_CreatorTime, F_LastModifyTime = org.F_LastModifyTime }); } else { endList.Add(org); } } //newDb.BulkDelete(newDb.OrganizationInfo_stu.ToList()); //操作完成后,删除取出来的数据 //oldDb.BulkInsert(endList); oldDb.Sys_Organize.AddRange(endList); oldDb.SaveChanges(); oldDb.Dispose(); newDb.Dispose(); sw.Stop(); Console.WriteLine("南航项目:同步组织机构信息结束 --> 合计耗时:" + sw.ElapsedMilliseconds / 1000 + "s"); }