Example #1
0
        async Task ImportSingleRecordAsync(
            ImportingJob importingTask, ImportingTaskContext context, IRecordFinder recordFinder, IRecordImporter recordImporter, IDataSourceReader reader)
        {
            var propValues = new Dictionary <string, object>(importingTask.Descriptor.ImportEntity.Fields.Count);

            foreach (var fieldMapping in importingTask.Descriptor.ImportEntity.Fields)
            {
                var propertyValueExpression = reader.GetField(fieldMapping.Selector).ToString();
                var metaProperty            = importingTask.Entity.Fields[fieldMapping.Field];
                if (metaProperty.Type.TryParse(metaProperty, propertyValueExpression, out var propertyValue, fieldMapping.Format))
                {
                    propValues.Add(metaProperty.Name, propertyValue);
                }
Example #2
0
        public async Task <object> FindExistedRecordOrDefaultAsync(ImportingJob importingTask, IReadOnlyDictionary <string, object> symbols)
        {
            var entityWhere = importingTask.Descriptor.ImportEntity.Where;

            if (string.IsNullOrEmpty(entityWhere))
            {
                return(null);
            }
            var pred = this.CreateEntityPredicateExpression(entityWhere, symbols);
            var repo = importingTask.Descriptor.IsSudo ? _repository.Sudo() : _repository;

            return(await _repository.FirstOrDefaultAsync(pred));
        }
Example #3
0
        async Task DoImportAsync(ImportingJob importingTask, ImportingTaskContext context)
        {
            var dataSource = _dataSources.Single(x => x.Format == importingTask.Descriptor.DataSource.Format);

            var recordFinderType = typeof(GenericRecordFinder <>).MakeGenericType(importingTask.Entity.ClrType);
            var recordFinder     = context.ServiceProvider.GetRequiredService(recordFinderType) as IRecordFinder;

            var recordImporterType = typeof(GenericRecordImporter <>).MakeGenericType(importingTask.Entity.ClrType);
            var recordImporter     = context.ServiceProvider.GetRequiredService(recordImporterType) as IRecordImporter;

            using (var stream = importingTask.ImportFileInfo.CreateReadStream())
                using (var reader = dataSource.Open(stream, importingTask.Descriptor.ImportEntity.Selector)) {
                    await reader.Initialize();

                    while (await reader.ReadAsync())
                    {
                        await ImportSingleRecordAsync(importingTask, context, recordFinder, recordImporter, reader);
                    }
                }
        }
Example #4
0
 public async Task InsertOrUpdateEntityAsync(ImportingJob importingTask, object record, bool canUpdate)
 {
     var typedRecord = (TEntity)record;
     var repo        = importingTask.Descriptor.IsSudo ? _repository.Sudo() : _repository;
     await repo.InsertOrUpdateAsync(typedRecord);
 }