我有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项,所以它实际上只链接一个副本。提前谢谢!
编辑:根据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; }
答案 0 :(得分:0)
尝试在Ingredient类中添加字符串属性数量。您需要做的就是将鸡蛋的数量更新为3。这样做只需要您更新属性而不是添加相同的成分三次。如果它是任何其他成分,你可以添加盎司或汤匙或杯子的数量全部在字符串。然后检索和显示数量就足够了。如果有帮助,请告诉我?