/// <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 }); }