internal async Task UpdateTrainingCatalogAsync(UpdateDbContext context, TrainingProvider trainingProvider,
                                                       string description, ServerMediaPathsContainer pathsContainer, bool useArchiveData = false, bool logUpdateToDb = true)
        {
            var updateEvent = new UpdateEvent(trainingProvider.Id, description, _dateTimeProxy.UtcNow);

            context.UpdateEvents.Add(updateEvent);

            await context.SaveChangesAsync();

            using (var catalog = _activatorProxy.CreateInstance <ITrainingCatalog>(trainingProvider.AssemblyType))
            {
                catalog.Initialize(trainingProvider.Name, trainingProvider.Id, trainingProvider.SiteUrl,
                                   trainingProvider.SourceUrl, trainingProvider.SourceLocation, pathsContainer, _archiveDirectoryPath);
                try
                {
                    await catalog.UpdateAsync(updateEvent, context, useArchiveData, logUpdateToDb);

                    updateEvent.EndedOn = _dateTimeProxy.UtcNow;
                    if (context.AuthorsResolves.Local.Any())
                    {
                        updateEvent.UpdateResult = UpdateResult.NeedManualResolve;
                    }
                    else
                    {
                        updateEvent.UpdateResult = UpdateResult.Success;
                    }

                    await context.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    updateEvent.EndedOn      = _dateTimeProxy.UtcNow;
                    updateEvent.UpdateResult = UpdateResult.Error;

                    var aggregateException = ex as AggregateException;
                    var errorData          = aggregateException != null
                  ? aggregateException.Flatten().ToString()
                  : ex.ToString();

                    updateEvent.ErrorData = errorData;

                    updateEvent.AuthorsUpdates    = null;
                    updateEvent.CategoriesUpdates = null;
                    updateEvent.CoursesUpdates    = null;

                    context.SetStateToDetached(updateEvent);

                    using (var ctx = _contextFactory.CreateDbContext())
                    {
                        ctx.SetStateToModified(updateEvent);
                        ctx.SaveChanges();
                    }
                }
            }
        }
      internal async Task UpdateTrainingCatalogAsync(UpdateDbContext context, TrainingProvider trainingProvider,
         string description, ServerMediaPathsContainer pathsContainer, bool useArchiveData = false, bool logUpdateToDb = true)
      {
         var updateEvent = new UpdateEvent(trainingProvider.Id, description, _dateTimeProxy.UtcNow);

         context.UpdateEvents.Add(updateEvent);

         await context.SaveChangesAsync();

         using (var catalog = _activatorProxy.CreateInstance<ITrainingCatalog>(trainingProvider.AssemblyType))
         {
            catalog.Initialize(trainingProvider.Name, trainingProvider.Id, trainingProvider.SiteUrl,
               trainingProvider.SourceUrl, trainingProvider.SourceLocation, pathsContainer,_archiveDirectoryPath);
            try
            {
               await catalog.UpdateAsync(updateEvent, context, useArchiveData, logUpdateToDb);

               updateEvent.EndedOn = _dateTimeProxy.UtcNow;
               if (context.AuthorsResolves.Local.Any())
               {
                  updateEvent.UpdateResult = UpdateResult.NeedManualResolve;
               } else
               {
                  updateEvent.UpdateResult = UpdateResult.Success;
               }

               await context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
               updateEvent.EndedOn = _dateTimeProxy.UtcNow;
               updateEvent.UpdateResult = UpdateResult.Error;

               var aggregateException = ex as AggregateException;
               var errorData = aggregateException != null
                  ? aggregateException.Flatten().ToString()
                  : ex.ToString();

               updateEvent.ErrorData = errorData;

               updateEvent.AuthorsUpdates = null;
               updateEvent.CategoriesUpdates = null;
               updateEvent.CoursesUpdates = null;

               context.SetStateToDetached(updateEvent);

               using (var ctx = _contextFactory.CreateDbContext())
               {
                  ctx.SetStateToModified(updateEvent);
                  ctx.SaveChanges();
               }
            }
         }
      }