public async Task AddBulkFiles() { var path = _environment.ContentRootPath; var sep = "/"; var boletin = string.Join(sep, path, "..", "UNSYNC/DB"); var pwd = string.Join(sep, "..", "UNSYNC/DB", "plankton"); //var pwd = string.Join(sep, boletin, "TEST"); if (!Directory.Exists(pwd)) { return; } var error = string.Join(sep, boletin, "ERROR"); var ok = string.Join(sep, boletin, "OK"); var entries = new HashSet <EnsayoFito>(); var centres = new HashSet <Centre>(); var fitos = new HashSet <Phytoplankton>(); var groups = new HashSet <Groups>(); using (var log = new StreamWriter(pwd + "/BulkPlankton.log")) { foreach (var d in Directory.GetDirectories(pwd)) { foreach (var f in Directory.GetFiles(d)) { var toskip = new List <string> { "Centre", "Fitoplanctons", "PSMB" }; var stream = new StreamReader(f, Encoding.GetEncoding("Windows-1252"), true); var html = stream.ReadToEnd(); stream.Close(); using var temp = new TableToExcel(); temp.Process(html, out ExcelPackage xlsx); (Centre centre, EnsayoFito item, List <Phytoplankton> fito, List <Groups> group, string err) = await _import.AmbAsync(xlsx, toskip) .ConfigureAwait(false); if (item != null && !fito.Any()) { err = "fito empty"; } var dest = err == null || err == "Archivo ya ingresado" ? ok : error; var dir = new DirectoryInfo(d); var targetPath = string.Join(sep, dest, dir.Name); if (!Directory.Exists(targetPath)) { Directory.CreateDirectory(targetPath); } var file = string.Join(sep, path, f); var newf = string.Join(sep, targetPath, Path.GetFileName(f)); try { File.Move(file, newf); } catch (IOException e) { log.WriteLine(e); } if (!string.IsNullOrEmpty(err)) { log.WriteLine(err); continue; } if (centre != null) { centres.UnionWith(new List <Centre> { centre }); } if (item != null) { entries.UnionWith(new List <EnsayoFito> { item }); } if (fito != null) { fitos.UnionWith(fito); } if (group != null) { groups.UnionWith(group); } } } log.Close(); } foreach (var c in centres) { var centre = await _context.FindAsync <Centre>(c.Id) .ConfigureAwait(false); if (centre == null) { await _context.Centre.AddAsync(c).ConfigureAwait(false); } else { _context.Centre.Update(c); } } //context.BulkInsert(centres); foreach (var e in entries) { var entrie = await _context.FindAsync <EnsayoFito>(e.Id) .ConfigureAwait(false); if (entrie == null) { await _context.EnsayoFito.AddAsync(e) .ConfigureAwait(false); } } //context.BulkInsert(entries); foreach (var f in fitos) { var fito = _context.Phytoplankton .SingleOrDefault(p => p.EnsayoFitoId == f.EnsayoFitoId && p.Species == f.Species); if (fito == null) { await _context.Phytoplankton.AddAsync(f) .ConfigureAwait(false); } } await _context.SaveChangesAsync() .ConfigureAwait(false); //context.BulkInsert(fitos); await _context.AddRangeAsync(groups) .ConfigureAwait(false); }