Я видел несколько вопросов и ответов о добавлении значения для дочернего элемента при добавлении/обновлении родителя, но мой вопрос противоположный. У меня есть компонент модели с отношения родитель-ребенок:Добавить значение родительскому элементу, когда значение добавлено в Child MVC
public class Component
{
public virtual int ComponentId { get; set; }
public virtual string Type { get; set; }
public virtual string Name { get; set; }
public virtual Course Course { get; set; }
public virtual int ParentId { get; set; }
public virtual Component Parent { get; set; }
public virtual List<Component> Childs { get; set; }
public virtual List<Evaluation> Evaluations { get; set; }
}
И я должен дать оценку каждому ребенку каждому пользователю. У меня есть эта модель:
public class Evaluation
{
public virtual int EvaluationId { get; set; }
public virtual int ComponentId { get; set; }
public virtual Component Component { get; set; }
public virtual int UserCourseId { get; set; }
public virtual UserCourse User { get; set; }
public virtual int Grade { get; set; }
}
И вид, что получает выбранный компонент и позволяет выбрать пользователя и дать оценку. Это разрешено давать оценку только последнему ребенку, а класс их родителей будет одинакового класса ребенка (идеей в будущем будет больше детей, а класс родителя будет представлять собой сумму их оценки). Поэтому мне нужно создать новую строку в базе данных с тем же классом, но с родительским идентификатором выбранного компонента. Я попробовал этот код, но он не работает:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Evaluation evaluation)
{
if (ModelState.IsValid)
{
if (evaluation.Component.ParentId != 0)
{
var nota = new Evaluation
{
ComponentId = evaluation.Component.ParentId,
UserCourseId = evaluation.UserCourseId,
Grade = evaluation.Grade
};
db.Evaluations.Add(nota);
db.SaveChanges();
}
db.Evaluations.Add(evaluation);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(evaluation);
}
(Обратите внимание, что этот код может и, вероятно, совершенно неправильно) Как я могу это сделать? Thanks