public void SetModifiedMenuAsDefault(string enterpriseId) { using (var session = _documentStore.OpenSession()) { var enterprise = session.Load <Enterprise>(enterpriseId); var modifiedMenu = session.Include <ModifiedMenu>(m => m.Menu.Categories.SelectMany(p => p.Products)).Load(enterprise.ModifiedMenu); //Get deleted products. Products that exist in Original menu but NOT in the new Modified menu. var deletedProductsIds = GeneralHelper.CompareLists(enterprise.Menu.Categories.SelectMany(c => c.Products).ToList(), modifiedMenu.Menu.Categories.SelectMany(c => c.Products).ToList()); var productsToDelete = session.Load <Product>(deletedProductsIds); foreach (var productToDelete in productsToDelete) { //Delete products if (productToDelete.Id == enterpriseId) { session.Delete(productToDelete); } else { _logger.Warn(string.Format("Was about to delete product ({0}) that not belongs to enterprise ({1}) Code:[bvfgttls]", productToDelete.Id, enterpriseId)); } } if (productsToDelete.Any()) { _logger.Info(string.Format("{0} products deleted for approved modified menu. Enterprise: {1}", productsToDelete.Count(), enterpriseId)); } //Set all updated versions to be the real versions var products = session.Load <Product>(modifiedMenu.Menu.Categories.SelectMany(p => p.Products)); foreach (var p in products.Where(p => p.UpdatedVersion != null)) { var product = ProductHelper.AddUpdatedInfoToProduct(p); product.UpdatedVersion = null; } if (products.Any()) { _logger.Info(string.Format("Updated {0} products for approved modified menu. Enterprise: {1}", products.Count(), enterpriseId)); } enterprise.Menu = modifiedMenu.Menu; enterprise.ModifiedMenu = null; session.Delete(modifiedMenu); session.SaveChanges(); } }