public void Synchronize()
        {
            var masterEntries = _master.GetAll().ToDictionary(e => e.Id);
            var slaveEntries  = _slave.GetAll().ToDictionary(e => e.Id);

            foreach (var masterId in masterEntries.Keys)
            {
                if (!slaveEntries.ContainsKey(masterId))
                {
                    continue;
                }

                var slaveEntry  = slaveEntries[masterId];
                var masterEntry = masterEntries[masterId];

                var slaveProperties             = FilterForSynchronization(_slave, slaveEntry.Properties);
                var slaveMappedMasterProperties = FilterForSynchronization(_slave, MapProperties(_master, masterEntry.Properties));

                SynchronizationEntry updateEntry = null;

                if (!AreEqual(slaveMappedMasterProperties, slaveProperties))
                {
                    Console.WriteLine("Properties differ");
                    Console.WriteLine("Slavemapped master:" + slaveMappedMasterProperties.Select(kv => kv.Value).Join(','));
                    Console.WriteLine("Slave             :" + slaveProperties.Select(kv => kv.Value).Join(','));


                    updateEntry = new SynchronizationEntry(masterId, slaveEntry.Status, slaveMappedMasterProperties)
                    {
                        Ordinal = slaveEntry.Ordinal
                    };
                }

                if (SynchronizeOrdinal && masterEntry.Ordinal != slaveEntry.Ordinal)
                {
                    Console.WriteLine("Ordinals differ: {0}-{1}", masterEntry, slaveEntry);
                    updateEntry = new SynchronizationEntry(masterId, slaveEntry.Status, slaveMappedMasterProperties)
                    {
                        Ordinal = masterEntry.Ordinal
                    };
                }

                if (updateEntry != null)
                {
                    _slave.UpdateData(updateEntry);
                }
            }
        }