Пример #1
0
        /// <summary>
        /// Import data using the specified <paramref name="importDefinition" /> and <paramref name="importData" />.
        /// </summary>
        /// <param name="importDefinition">The import definition.</param>
        /// <param name="importData">The import data.</param>
        /// <param name="username">The name of the user importing the data.</param>
        /// <param name="cancellationToken">The cancellation token.</param>
        /// <returns>The results of the import</returns>
        /// <exception cref="ArgumentNullException"><paramref name="importData" /> or <paramref name="importDefinition" /> is null</exception>
        public virtual async Task <ImportResult> ImportAsync(ImportDefinition importDefinition, ImportData importData, string username, CancellationToken cancellationToken = default)
        {
            if (importData == null)
            {
                throw new ArgumentNullException(nameof(importData));
            }
            if (importDefinition == null)
            {
                throw new ArgumentNullException(nameof(importDefinition));
            }

            var context = new ImportProcessContext(importDefinition, importData, username, _importFactory);

            var dataTable = CreateTable(context);

            await PopulateTable(context, dataTable);

            var mergeDefinition = CreateMergeDefinition(context);

            var result = await _dataSession
                         .MergeData(mergeDefinition)
                         .ExecuteAsync(dataTable, cancellationToken);

            return(new ImportResult {
                Processed = result, Errors = context.Errors
            });
        }