コード例 #1
0
        public async Task Test1()
        {
            CashlogSettings settings = new CashlogSettings
            {
                DataBaseConnectionString = "",
                DataProviderType         = DataProviderType.MySql,
                FnsPhone    = "",
                FnsPassword = ""
            };

            int         i          = 0;
            IFnsService fnsService = new FnsService(Mock.Of <ILogger>());
            IList <FnsReceiptDetailInfo> receiptDetailInfos = new List <FnsReceiptDetailInfo>();

            ReceiptDto[] allReceipts;
            using (var uow = new UnitOfWork(new ApplicationContext(settings.DataBaseConnectionString, settings.DataProviderType)))
                allReceipts = await uow.Receipts.GetAllAsync();

            var checkingReceipts = allReceipts
                                   .Where(x => !string.IsNullOrEmpty(x.FiscalDocument))
                                   .OrderByDescending(x => x.Id)
                                   .Take(12);

            foreach (var receipt in checkingReceipts)
            {
                var receiptMainInfo = receipt.ToCore().ToReceiptMainInfo();
                if (receiptMainInfo.IsValid())
                {
                    try
                    {
                        FnsReceiptDetailInfo data = await fnsService.GetReceiptAsync(receiptMainInfo, settings.FnsPhone, settings.FnsPassword);

                        if (data != null)
                        {
                            receiptDetailInfos.Add(data);
                        }
                    }
                    catch
                    {
                        throw;
                    }

                    Task.Delay(TimeSpan.FromSeconds(2)).Wait();
                }

                i++;
            }
        }
コード例 #2
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Нажмите enter, чтобы начать миграцию данных");
            Console.ReadLine();
            CashlogSettings settingsFrom = new CashlogSettings
            {
                DataBaseConnectionString = "",
                DataProviderType         = DataProviderType.MsSql
            };
            CashlogSettings settingsTo = new CashlogSettings
            {
                DataBaseConnectionString = "",
                DataProviderType         = DataProviderType.MySql
            };

            if (string.IsNullOrEmpty(settingsFrom.DataBaseConnectionString) || string.IsNullOrEmpty(settingsTo.DataBaseConnectionString))
            {
                Console.WriteLine("Ошибка! Необходимо указать подключение к БД для обоих источников данных");
            }
            else
            {
                try
                {
                    Console.WriteLine();

                    await MigrateObjects(x => x.Groups, settingsFrom, settingsTo);
                    await MigrateObjects(x => x.Customers, settingsFrom, settingsTo);
                    await MigrateObjects(x => x.BillingPeriods, settingsFrom, settingsTo);
                    await MigrateObjects(x => x.MoneyOperations, settingsFrom, settingsTo);
                    await MigrateObjects(x => x.Receipts, settingsFrom, settingsTo);
                    await MigrateObjects(x => x.ReceiptConsumerMaps, settingsFrom, settingsTo);

                    Console.WriteLine("Миграцию данных успешно завершена");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Во время миграции данных произошла ошибка: {ex.Message}:\n{ex.StackTrace}");
                }
            }

            Console.WriteLine("Нажмите enter, чтобы завершить приложение...");
            Console.ReadLine();
        }
コード例 #3
0
        /// <summary>
        /// Производит миграцию объектов для определённого репозитория.
        /// </summary>
        /// <typeparam name="T">Типа данных в репозитории</typeparam>
        /// <param name="getTargetField">Функция-указатель на поле репозитория.</param>
        /// <param name="settingsFrom">Настройки сервера с которого происходит миграция данных.</param>
        /// <param name="settingsTo">Настройки сервера на который происходит миграция данных.</param>
        private static async Task MigrateObjects <T>(Func <UnitOfWork, IRepository <T> > getTargetField, CashlogSettings settingsFrom, CashlogSettings settingsTo) where T : Entity
        {
            Console.WriteLine($"Миграция данных для типа {typeof(T)}...");

            using var uowTo = new UnitOfWork(new ApplicationContext(settingsTo.DataBaseConnectionString, settingsTo.DataProviderType));
            var repositoryTo = getTargetField(uowTo);

            // Проверяем что табличка пустая.
            if (await repositoryTo.AnyAsync())
            {
                throw new InvalidOperationException($"В репозитории типа {typeof(T)} уже есть данные");
            }

            using var uowFrom = new UnitOfWork(new ApplicationContext(settingsFrom.DataBaseConnectionString, settingsFrom.DataProviderType));

            // Получаем все объекты.
            var data = await getTargetField(uowFrom).GetAllAsync();

            Console.WriteLine($"Получено {data.Length} объектов типа {typeof(T)}.");

            // Добавляем и сохраняем данные.
            await repositoryTo.AddRangeAsync(data);

            await uowTo.SaveChangesAsync();

            Console.WriteLine($"Миграция данных для типа {typeof(T)} закончена успешно!");
            Console.WriteLine();
        }