void ExecuteBulkInsert(List <MaestroProduct> plist) { UnitTypeManager um = new UnitTypeManager(context); MaestroUnitType unknownUnitType = um.GetUnknownItem(); List <MaestroProduct> updatedProducts = new List <MaestroProduct>(); foreach (MaestroProduct product in plist) { MaestroProduct existing = ProductCache.Instance.GetByQbId(product.QuickBooksProductId); if (existing != null) { product.Id = existing.Id; product.UnitType = existing.UnitType; product.ProductGroup = existing.ProductGroup; pm.Update(product); updatedProducts.Add(existing); } else { product.UnitType = unknownUnitType; } } List <ITransactionEntity> clist = plist.Where(q => !updatedProducts.Select(u => u.QuickBooksProductId).Contains(q.QuickBooksProductId)).Cast <ITransactionEntity>().ToList(); if (clist.Count > 0) { pm.BulkInsert(clist); } if (updatedProducts.Count > 0) { updatedProducts.ForEach(p => pm.Update(p)); } if (clist.Count > 0 || updatedProducts.Count > 0) { ProductCache.Instance.Reload(true); } }