2016-08-21 5 views
0

Я видел несколько вопросов и ответов о добавлении значения для дочернего элемента при добавлении/обновлении родителя, но мой вопрос противоположный. У меня есть компонент модели с отношения родитель-ребенок:Добавить значение родительскому элементу, когда значение добавлено в 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

ответ

0

Создав nota, создайте Component. что-то вроде этого:

var nota = new Evaluation 
       { 
        ComponentId = evaluation.Component.ParentId, 
        UserCourseId = evaluation.UserCourseId, 
        Grade = evaluation.Grade 
       }; 

    var component= new Component(); 
    component.add(nota); 
    db.Components.Add(component); 
    db.SaveChanges(); 

Вы должны увидеть nota также добавил к Evaluation таблицу из-за отношений родитель-ребенок.

Смежные вопросы