public void SetResult(SyncResultBase <SyncModel> result) { var tName = result.Name; results.Add(tName, result); TablesToSync[tName] = result.CurrentVersion; }
private void SyncDb(bool updateVersions) { var adapterLocator = new AdapterLocator(ServiceLocatorMaster, ServiceLocatorSchool , context.GetSyncResult <Gender>().All , context.GetSyncResult <SpEdStatus>().All); List <SyncModelWrapper> models = new List <SyncModelWrapper>(); foreach (var type in context.Types) { var fkProps = new List <PropertyInfo>(); var flag = BindingFlags.Instance | BindingFlags.Public; var props = type.Value.GetProperties(flag); foreach (var propertyInfo in props) { if (propertyInfo.CanRead && propertyInfo.CanWrite && propertyInfo.GetCustomAttribute <NullableForeignKey>() != null) { fkProps.Add(propertyInfo); } } SyncResultBase <SyncModel> sr = context.GetSyncResult(type.Value); foreach (var syncModel in sr.All) { if (syncModel.SYS_CHANGE_VERSION == syncModel.SYS_CHANGE_CREATION_VERSION || fkProps.Count == 0) { models.Add(SyncModelWrapper.Create(syncModel.SYS_CHANGE_CREATION_VERSION ?? syncModel.SYS_CHANGE_VERSION, PersistOperationType.Insert, syncModel)); } else { var iModel = syncModel.Clone(); foreach (var propertyInfo in fkProps) { propertyInfo.SetValue(iModel, null); } models.Add(SyncModelWrapper.Create(syncModel.SYS_CHANGE_CREATION_VERSION, PersistOperationType.Insert, iModel)); models.Add(SyncModelWrapper.Create(syncModel.SYS_CHANGE_VERSION, PersistOperationType.Update, syncModel)); } } if (sr.Updated != null) { models.AddRange(sr.Updated.Select(x => SyncModelWrapper.Create(x.SYS_CHANGE_VERSION, PersistOperationType.Update, x))); } if (sr.Deleted != null) { foreach (var syncModel in sr.Deleted) { models.Add(SyncModelWrapper.Create(syncModel.SYS_CHANGE_VERSION, PersistOperationType.Delete, syncModel)); if (fkProps.Count != 0) { models.Add(SyncModelWrapper.Create(0, PersistOperationType.PrepareToDelete, syncModel)); } } } } models.Sort(); IList <SyncModelWrapper> batch = new List <SyncModelWrapper>(); for (int i = 0; i < models.Count; i++) { if (i > 0 && (models[i].Model.GetType().Name != models[i - 1].Model.GetType().Name || models[i].OperationType != models[i - 1].OperationType)) { Persist(adapterLocator.GetAdapter(batch[0].Model.GetType()), batch[0].OperationType, batch.Select(x => x.Model).ToList()); batch.Clear(); } batch.Add(models[i]); } Persist(adapterLocator.GetAdapter(batch[0].Model.GetType()), batch[0].OperationType, batch.Select(x => x.Model).ToList()); insertedUsers = adapterLocator.InsertedUserIds; if (updateVersions) { Log.LogInfo("update versions"); UpdateVersion(); } }