public int EditRecipe(EditRecipeViewModel editRecipe) { try { var recipe = _recipeRepository.GetRecipeById(editRecipe.Id); if (recipe != null) { using (var transaction = new TransactionScope()) { recipe.Id = editRecipe.Id; recipe.RecipeName = editRecipe.RecipeName; recipe.RecipeImage = editRecipe.RecipeImage ?? recipe.RecipeImage; recipe.RecipeDescription = editRecipe.RecipeDescription; recipe.CreatedAt = editRecipe.CreatedAt; recipe.ModefiedAt = DateTime.Now; recipe.CookingTime = editRecipe.CookingTime; recipe.RecipeCategoryId = editRecipe.RecipeCategoryId; List <int> prodIdlist = new List <int>(); List <float> prodWeight = new List <float>(); var weights = recipe.RecipeProdRecords.Select(pr => new SelectProdWeightViewModel { Id = pr.ProductId, Name = pr.Product.ProductName, Weight = pr.Weight }).ToList(); foreach (var w in weights) { prodWeight.Add(w.Weight); } foreach (var item in recipe.RecipeProdRecords) { prodIdlist.Add(item.Id); } _recipeProdRecordRepository.RemoveRecipe(editRecipe.Id); _recipeProdRecordRepository.SaveChanges(); _recipeRepository.SaveChanges(); var i = 0; foreach (var item in editRecipe.Products) { var prod = _productRepository.GetProductById(item); if (prod != null) { try { _recipeProdRecordRepository.Add(new RecipeProdRecord() { RecipeId = editRecipe.Id, ProductId = item, Weight = prodWeight[i] }); } catch { _recipeProdRecordRepository.Add(new RecipeProdRecord() { RecipeId = editRecipe.Id, ProductId = item, Weight = 0 }); } } ++i; } List <int> menuIdlist = new List <int>(); foreach (var item in recipe.MenuRecipeRecords) { menuIdlist.Add(item.Id); } foreach (var item in menuIdlist) { _menuRecipeRecordRepository.Remove(item); } _menuRecipeRecordRepository.SaveChanges(); _recipeRepository.SaveChanges(); foreach (var item in editRecipe?.Menus) { var menu = _menuRepository.GetMenuById(item); if (menu != null) { _menuRecipeRecordRepository.Add(new MenuRecipeRecord() { RecipeId = editRecipe.Id, MenuId = item }); } } _recipeProdRecordRepository.SaveChanges(); _menuRecipeRecordRepository.SaveChanges(); _recipeRepository.SaveChanges(); transaction.Complete(); } } } catch { return(0); } return(editRecipe.Id); }