Exemplo n.º 1
0
        public void ApplyChanges(ISqlDataStore datastore, ISyncStatProvider statProvider, IConflictsManager conflictsManager)
        {
            if (EntityChangeset.Count == 0)
            {
                return;
            }

            var progression = new LinearProgression(EntityChangeset.Count * 3);

            statProvider.SetNewState(SyncStates.ApplyingRemoteChange, progression);

            var changeSets = new List <ChangeSet>();

            foreach (var entityChangeset in EntityChangeset)
            {
                entityChangeset.SetDatastore(datastore);
                var conflic = conflictsManager.CreateEntityConflict(entityChangeset, _syncSessionInfo);
                changeSets.Add(new ChangeSet(entityChangeset, conflic, conflictsManager));
            }

            // Update FK changes before delete
            foreach (var entityChange in changeSets)
            {
                entityChange.ApplyUpdate();
                progression.CurrentStepFinished();
            }

            // Delete FK before delete PK
            changeSets.Reverse();
            foreach (var entityChange in changeSets)
            {
                entityChange.ApplyDelete();
                progression.CurrentStepFinished();
            }

            // Insert PK before insert FK
            changeSets.Reverse();
            foreach (var entityChange in changeSets)
            {
                entityChange.ApplyInsert();
                entityChange.ApplyLastSync();
                entityChange.ResolveConflicts(datastore);
                progression.CurrentStepFinished();
            }
        }
Exemplo n.º 2
0
        public void ApplyRemoteResolution(ISqlDataStore dataStore, ISyncSessionInfo syncSession, ISyncStatProvider statProvider)
        {
            if (EntitiesConflict == null || EntitiesConflict.Count == 0)
            {
                return;
            }

            var progression = new LinearProgression(EntitiesConflict.Count);

            statProvider.SetNewState(SyncStates.ApplyRemoteResolution, progression);

            foreach (var entityConflict in EntitiesConflict)
            {
                entityConflict.ApplyRemoteResolution(dataStore, syncSession);
                progression.CurrentStepFinished();
            }
        }