public static bool AddRecipe(string shawarmaName, IngradientWeight[] ingradientWeightAccordings, int cookingTime = 0)
 {
     using (var ctx = new ShawarmaDBEntities())
     {
         Shawarma shawarma = ctx.Shawarmas.FirstOrDefault(sh => sh.ShawarmaName == shawarmaName) ?? new Shawarma
         {
             ShawarmaName = shawarmaName,
             CookingTime  = cookingTime
         };
         ShawarmaRecipe recipe = ctx.ShawarmaRecipes.Create();
         recipe.Shawarma = shawarma;
         foreach (var ingradientWeightAccording in ingradientWeightAccordings)
         {
             Ingradient ingradient =
                 ctx.Ingradients.FirstOrDefault(
                     ing => ing.IngradientName == ingradientWeightAccording.IngradientName);
             if (ingradient == null)
             {
                 AddIngredient(ingradientWeightAccording.IngradientName, 0);
                 ingradient =
                     ctx.Ingradients.FirstOrDefault(
                         ing => ing.IngradientName == ingradientWeightAccording.IngradientName);
             }
             recipe.IngradientId = ingradient.IngradientId;
             recipe.Weight       = ingradientWeightAccording.Weight;
             ctx.ShawarmaRecipes.Add(recipe);
         }
         return(Commit(ctx));
     }
 }
        public static bool AddIngredient(string name, int weight, string categoryName = "")
        {
            using (var ctx = new ShawarmaDBEntities())
            {
                Ingradient ingradient = ctx.Ingradients.FirstOrDefault(ingr => ingr.IngradientName == name);
                if (ingradient != null) //there is specified ingradient; increasing
                {
                    ingradient.TotalWeight += weight;
                }
                else
                {
                    if (categoryName != "")
                    {
                        IngradientCategory category =
                            ctx.IngradientCategories.FirstOrDefault(ingr => ingr.CategoryName == categoryName);
                        if (category == null)//there is not specified category; creating
                        {
                            ctx.IngradientCategories.Add(new IngradientCategory {
                                CategoryName = categoryName
                            });
                            category =
                                ctx.IngradientCategories.Local.First(cat => cat.CategoryName == categoryName);
                        }
                        ctx.Ingradients.Add(new Ingradient
                        {
                            CategoryId     = category.CategoryId,
                            IngradientName = name,
                            TotalWeight    = weight
                        });
                    }
                    else
                    {
                        ctx.Ingradients.Add(new Ingradient
                        {
                            IngradientName = name,
                            TotalWeight    = weight
                        });
                    }
                }

                return(Commit(ctx));
            }
        }