ASP.NET MVC5多对多关系多个相同记录

时间:2015-12-16 05:08:42

标签: c# asp.net entity-framework ef-code-first asp.net-mvc-5.2

我有2个型号,配方和配料。配方可以有许多成分,以及一种成分可以属于许多食谱。我遇到的问题是当我尝试添加3个(数量)鸡蛋时,我添加了相同的实体3次,但当我读回模型时,它只列出一次。我猜它实际上只保存一个,因为它是“重复”。有关详细信息,请参见下文。

模特:

public class Recipe
{
   public int RecipeID { get; set; }
   public string Name { get; set; }
   public virtual ICollection<Ingredient> Ingredients { get; set; }
}

public class Ingredient
{
   public int IngredientID { get; set; }
   public string Name{ get; set; }
   public virtual ICollection<Recipe> Recipes { get; set; }
}

所以,假设我有一份需要3个鸡蛋(配料)的食谱(蛋糕)。在我的代码中,我只会添加一个鸡蛋(成分)3次,我希望这会起作用。但是当我读回食谱时,它只有鸡蛋(成分)一次。我猜它是在成分中添加了一个RecipeID,然后加载了那个单一的成分,但我怎么能超过这个?以下是我用于将配料添加到配方中的代码。

[HttpPost]
public ActionResult Create(Recipe recipe, List<Ingredient> ingredients)
{
   // for example, add ingredient egg 3 times
   foreach (var item in ingredients)
   {
      recipe.Ingredients.Add(item);
   }

   db.Recipes.Add(recipe);
   db.SaveChanges();
}

希望我的代码中没有拼写错误,但它确实有效。它迭代foreach循环的次数和它想象的一样多,并且一切都很好。就像我之前说过的,我很确定它只是用RecipeID更新Ingredient项,所以它实际上只链接一个副本。提前谢谢!

PS:这是我的第一篇文章,温柔! :) 我在发布之前对此进行了广泛的搜索

编辑:根据Satish Nissankala的评论,我刚刚创建了另一个处理我需要的课程。

public class RecipeContents
{
   public int RecipeContentsID { get; set; }
   public int RecipeID { get; set; }
   public int Quantity { get; set; }
   public Ingredient Ingredient { get; set; }
}

然后我将其添加到我的Recipe课程中。

public List<RecipeContents> Ingredients { get; set; }

1 个答案:

答案 0 :(得分:0)

尝试在Ingredient类中添加字符串属性数量。您需要做的就是将鸡蛋的数量更新为3。这样做只需要您更新属性而不是添加相同的成分三次。如果它是任何其他成分,你可以添加盎司或汤匙或杯子的数量全部在字符串。然后检索和显示数量就足够了。如果有帮助,请告诉我?