У меня есть 2 модели, рецепт и ингредиенты. Рецепт может содержать много ингредиентов, а также ингредиент может принадлежать многим рецептам. Проблема, с которой я сталкиваюсь, - это когда я пытаюсь добавить, скажем, 3 (количество) яиц, я добавляю одну и ту же сущность 3 раза, но когда я прочитаю модель, она просто указана один раз. Я предполагаю, что на самом деле это только спасает, так как это «дубликат». Подробности смотрите ниже.ASP.NET MVC5 Много-ко-многим отношениям с несколькими одинаковыми записями
Модели:
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
столько раз, сколько это предполагается, и все это хорошо сохраняет. Как я уже говорил ранее, я уверен, что он просто обновляет элемент Ingredient с помощью RecipeID, поэтому на самом деле он связывает только одну копию. Заранее спасибо!
PS: Это мой первый пост, будьте нежны! :) И я искал это широко, прежде чем размещать здесь
Редактировать: Основываясь на комментарии Сатиш Ниссанкала, я просто создал другой класс, который обрабатывает то, что мне нужно.
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; }
Лучшее решение, к которому я могу придумать, - это не иметь виртуального ингредиента вообще, он должен иметь открытый список QuantityIngredients {get; задавать; } ', который используется для хранения количества и Ингредиента, а затем просто загружает ингредиенты по мере необходимости. Я считаю, что должен быть более элегантный способ сделать это. Этот способ больше похож на хак. –