2016-12-30 58 views
0

我有一種方法應該基於checkbox tick來更新多對多表格。這裏的多對多關係在Exam實體和Objectives實體之間。但是我不知道如何實現它。如何使用View Model更新多對多表格

控制器:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit([Bind(Include = "id,Date,TotalMarks,ObjList")] ViewModel viewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     var selectedObj = viewModel.ObjList.Where(o => o.isAssigned == true); 

     var exam = new Exam() 
     { 
      id = viewModel.id, 
      ExamDate = viewModel.Date, 
      TotalMarks = viewModel.TotalMarks, 
     }; 

     if(selectedObj == null) 
     { 
      exam.Objectives = new List<Objectives>(); 
     } 

     //how do i implement this here? 
     //exam.Objectives.Add(obj) 

     db.Entry(exam).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(viewModel); 
} 

如該代碼所示,對於許多一對多表更新是基於ObjListView Model。我提到他們使用的方法,如在線教程:

exam.Obj.Add(obj); 

or 

exam.Obj.Remove(obj); 

不過,我不知道如何實現這個,因爲這些方法都是經過model自己進入method。我的情況是通過viewmodel的方法,所以我必須創建一個exam變量,然後保存到db

那麼,如何更新多對多表?

+0

'db.Exams.Add(檢查);''db.Exams.Remove(檢查);' –

回答

0

您可以將ObjList視圖模型轉換爲您的Objective模型,然後添加到上下文中。

var objectives= selectedOb. 
     .Select(obj=> new Objective 
     { 
      //map properties here like Id = obj.Id 
     }); 
    exam.Objectives.AddRange(objectives);