Пример #1
0
        /// <summary>
        /// Загрузка
        /// </summary>
        /// <param name="filepath"></param>
        public override void SyncIn(string filepath = null)
        {
            Init();
            var primarySyncDataSet = LoadDumpFile(SyncSettings.DataArchiver, filepath); //десериализованный датасет

            if (primarySyncDataSet == null)
            {
                throw new NullReferenceException("Не удалось получить данные для синхронизации...");
            }

            var contextDataset = FillSyncDataSet(mSyncDataSet, true);

            var syncTables = primarySyncDataSet.Tables.Cast <DataTable>().
                             Where(source => source.Columns.Count > 0).ToDictionary(source => source.TableName);

            //типы колонок могут отличаться в целевой и исходной например Guid -> String
            //тут происходит корректирока типов для таблиц дессериализованного датасета и отсев пустых таблиц
            var normalizedSyncData =
                contextDataset.Tables.Cast <DataTable>()
                .Where(model => syncTables.ContainsKey(model.TableName))
                .Select(model => FixTableDataTypes(model, syncTables[model.TableName], filepath));

            try
            {
                //тут десериализованный данные записываются в БД
                SyncSettings.DataSaveMethod.SaveDataOnTarget(SyncContext.GetConnectionString(), normalizedSyncData.ToArray());
            }
            catch (Exception ex)
            {
                SyncContext.Logger.Error(ex);
                Out(ex.Message);
                //todo : SyncErrors
            }
        }