public ImportItems() { _Context = new ECommerceDBContext(); }
public void UpdateAll(List<ItemsVM> items, bool bRemoveObsoleteCars, out List<String> errors, IImportItems progress) { errors = new List<String>(); if (items == null || items.Count == 0) return; _TrackErrors = true; _Errors.Clear(); // cache all. var dbCache = GetDBCache(); var existingItems = dbCache.Items; // This should keep the connecton open _Context.Database.Connection.Open(); int nItemsProcessed = 0; foreach (var item in items) { int existingItemId = 0; var existingItem = existingItems.Find(x => x.ItemRef == item.ItemRef); if (existingItem != null && existingItem.Id > 0) existingItemId = existingItem.Id; try { var result = AddOrUpdate(item, existingItemId, dbCache); if (result == AddUpdateResult.Added) progress.OnAdded(item); else if (result == AddUpdateResult.Updated) progress.OnUpdate(item); else if (result == AddUpdateResult.Error) progress.OnUpdateError(item); ++nItemsProcessed; } catch (Exception /*ex*/) { bool bLog = ShowDatabaseLog; // The context is invalid. recreate it and rebuild cache _Context = new ECommerceDBContext(); ShowDatabaseLog = bLog; _Context.Database.Connection.Open(); dbCache = GetDBCache(); } if (progress != null) { //progress(nItemsProcessed); } // If cars existed, it was updated. So remove it from the list if (existingItem != null && existingItem.Id > 0) existingItems.Remove(existingItem); } if (bRemoveObsoleteCars) { foreach (var item in existingItems) { Remove(item.Id); progress.OnRemoved(item); } } _Context.Database.Connection.Close(); errors = _Errors; _TrackErrors = false; }