private static bool SyncExportersToPayslipDb(EpbPayslipDbEntities payslipDb, List <Exporter> payslipExporters, SyncSetting syncSettings) { foreach (var payslipExporter in payslipExporters) { var exporter = payslipDb.Exporters.Find(payslipExporter.Id); Console.WriteLine(payslipExporter.CompanyOrFactoryName); if (exporter == null) { payslipDb.Exporters.Add(payslipExporter); syncSettings.NewSyncEntry += 1; } else { var modifiedExporterData = ConvertionService.ModifiedExporterData(exporter, payslipExporter); payslipDb.Entry(modifiedExporterData).State = EntityState.Modified; syncSettings.ModifiedSyncEntry += 1; } try { syncSettings.Skip += 1; payslipDb.SaveChanges(); } catch (Exception exception) { WriteExceptionLog(exception); Console.WriteLine(exception.Message); } } try { return(payslipDb.SaveChanges() > 0); } catch (Exception exception) { WriteExceptionLog(exception); return(false); } }
private static void CreateFirstExporterSyncStatusEntry(EpbPayslipDbEntities payslipDb, SyncTable table) { payslipDb.SyncSettings.Add(new SyncSetting { Id = Guid.NewGuid().ToString(), Created = DateTime.Now, CreatedBy = "System", Modified = DateTime.Now, ModifiedBy = "System", Active = true, SyncTable = (int)table, LastSyncDate = new DateTime(2017, 01, 01), NewSyncEntry = 0, ModifiedSyncEntry = 0, IsOneWaySync = true, IsInitialSync = true, IsCycleComplete = true, Take = 10, Skip = 0 }); payslipDb.SaveChanges(); }
private static void Main(string[] args) { var gspDb = new GspDBEntities(); var payslipDb = new EpbPayslipDbEntities(); var syncSettings = payslipDb.SyncSettings.FirstOrDefault(x => x.SyncTable == (int)SyncTable.Exporter); if (syncSettings == null) { CreateFirstExporterSyncStatusEntry(payslipDb, SyncTable.Exporter); syncSettings = payslipDb.SyncSettings.FirstOrDefault(x => x.SyncTable == (int)SyncTable.Exporter); } if (syncSettings == null) { return; } if (syncSettings.IsCycleComplete) { syncSettings.NewSyncEntry = 0; syncSettings.ModifiedSyncEntry = 0; syncSettings.Skip = 0; //syncSettings.Take = 0; syncSettings.IsCycleComplete = false; } syncSettings.Skip = 0; var count = syncSettings.IsInitialSync ? gspDb.Exporters.Count() : gspDb.Exporters.Count(x => x.Changed >= syncSettings.LastSyncDate); if (count == 0) { return; } Console.WriteLine("Total Syncable " + SyncTable.Exporter + " Found: " + count + "\n\n***********Sync Staus***********\n\n" + "Last Sync Date:" + syncSettings.LastSyncDate + "\n" + "Is One Way Sync? : " + syncSettings.IsOneWaySync + " \n" + "Is First Sync? : " + syncSettings.IsInitialSync + " \n" + "Query Helper Take Value: " + syncSettings.Take + "\n" + "Query Helper Skip Value: " + syncSettings.Skip + "\n"); Console.WriteLine( "System is giving you 30 seconds to validate and cancel the sync operation if anything found wrong!"); Thread.Sleep(30000); //for (var i = 0; i < count/syncSettings.Take + 1; i++) //{ // //Read Gsp Exporters // var gspExporters = LoadGspExporters(gspDb, syncSettings.Skip, syncSettings.Take); // //Convert to Payslip Exporter // var payslipExporters = ConvertToPayslipExporter(gspExporters); // //save to payslip db // var save = SyncExportersToPayslipDb(payslipDb, payslipExporters, syncSettings); //} int currentPageSize = 10, currentPageNumber = 1, currentTakeNumber = 10; for (currentPageNumber = 1; (currentPageNumber - 1) * currentPageSize < count; currentPageNumber++) { var currentSkipNumber = (currentPageNumber - 1) * currentPageSize; if ((currentPageNumber * currentPageSize) >= count) { currentTakeNumber = count - ((currentPageNumber - 1) * currentPageSize); } //Read Gsp Exporters var gspExporters = LoadGspExportersNewPaging(gspDb, currentSkipNumber, currentTakeNumber); //Convert to Payslip Exporter var payslipExporters = ConvertToPayslipExporter(gspExporters); //save to payslip db var save = SyncExportersToPayslipDb(payslipDb, payslipExporters, syncSettings); } syncSettings.IsCycleComplete = true; syncSettings.LastSyncDate = DateTime.Now.AddMinutes(-30); syncSettings.Modified = DateTime.Now; if (syncSettings.IsInitialSync) { syncSettings.IsInitialSync = false; } payslipDb.SaveChanges(); Console.WriteLine("Wow, the sync has been completed successfully!"); Console.ReadLine(); }