public void Import() { CsvToDictionaryLoader loader = new CsvToDictionaryLoader(_headerNames); string csvFile = File.ReadAllText(_filePath); List <Dictionary <string, string> > maps = loader.LoadToDictionary(csvFile); using (var context = new SossusvleiSedimentologyContext()) { string idHeader = maps.First().Keys.First(); foreach (var map in maps) { string sampleName = map[idHeader]; SampleOverview overview = context.SampleOverview.First(s => s.SampleName == sampleName); if (overview is null) { Console.WriteLine($"Missing overview for sample '{sampleName}'. Skipping data import."); continue; } var filteredMap = map.Where(m => m.Key != idHeader); foreach (var item in filteredMap) { TSedimentologicalData data = _mapConverter.Convert(item, overview); context.Set <TSedimentologicalData>().Add(data); try { context.SaveChanges(); } catch (Exception e) { e.HandleSaveChangesSqlException(map[idHeader]); } } } } }
public void Update <T>(IEnumerable <T> input, IMapConverter <T, Organization> converter = null) { int counter = 0; IEnumerable <Organization> mappedblock; mappedblock = (converter == null)? input.Select(s => Mapper.Map <T, Organization>(s)).ToList(): converter.Convert(input).ToList(); foreach (var itemUpserted in mappedblock) { if (itemUpserted.PersonPositions == null) { itemUpserted.PersonPositions = new List <PersonPosition>(); } if (itemUpserted.PhoneItems == null) { itemUpserted.PhoneItems = new List <UNS.Models.Entities.PhoneItem>(); } if (itemUpserted.EmailItems == null) { itemUpserted.EmailItems = new List <UNS.Models.Entities.EmailItem>(); } if (itemUpserted.FaxItems == null) { itemUpserted.FaxItems = new List <UNS.Models.Entities.FaxItem>(); } var family = itemUpserted.PersonPositions.Any() ? itemUpserted.PersonPositions.FirstOrDefault().Person.Family : null; var name = itemUpserted.PersonPositions.Any() ? itemUpserted.PersonPositions.FirstOrDefault().Person.Name : null; var patronimic = itemUpserted.PersonPositions.Any() ? itemUpserted.PersonPositions.FirstOrDefault().Person.Patronymic : null; var itemsFinded = ContexUNS.Organizations .Include("PhoneItems") .Include("FaxItems") .Include("EmailItems") .Include("OwnerRawAddresses") .Include("PersonPositions") .Where(W => W.FullName.ToLower().Trim() == itemUpserted.FullName.ToLower().Trim()).ToList(); if (itemsFinded.Any()) { if (itemsFinded.Count() == 1) { try { var y = itemsFinded.FirstOrDefault(); var t = Mapper.Map <Organization, Organization>(itemUpserted, y); ContexUNS.Organizations.AddOrUpdate(t); //ContexUNS.SaveChanges(); } catch (Exception e) { Logger.Logger.Error(e.Message); /*var changedEntries = ContexUNS.ChangeTracker.Entries() * .Where(x => x.State != EntityState.Unchanged).ToList(); * * foreach (var entry in changedEntries) * { * switch (entry.State) * { * case EntityState.Modified: * entry.CurrentValues.SetValues(entry.OriginalValues); * entry.State = EntityState.Unchanged; * break; * case EntityState.Added: * entry.State = EntityState.Detached; * break; * case EntityState.Deleted: * entry.State = EntityState.Unchanged; * break; * } * }*/ } Logger.Logger.Info(string.Join(" ", typeof(T).Name, "Изменено", input.Count().ToString(), "всего", counter.ToString())); counter++; } } else { ContexUNS.Organizations.Add(itemUpserted); try { //ContexUNS.SaveChanges(); } catch (Exception e) { Logger.Logger.Error(e.Message); /*var changedEntries = ContexUNS.ChangeTracker.Entries() * .Where(x => x.State != EntityState.Unchanged).ToList(); * * foreach (var entry in changedEntries) * { * switch (entry.State) * { * case EntityState.Modified: * entry.CurrentValues.SetValues(entry.OriginalValues); * entry.State = EntityState.Unchanged; * break; * case EntityState.Added: * entry.State = EntityState.Detached; * break; * case EntityState.Deleted: * entry.State = EntityState.Unchanged; * break; * } * }*/ } Logger.Logger.Info(string.Join(" ", typeof(T).Name, "Добавлено", counter.ToString(), "Из", input.Count().ToString())); counter++; } } ContexUNS.SaveChanges(); }