2016-12-30 7 views
0

チェックボックスのチェックに基づいて多対多テーブルを更新する方法があります。ここでの多対多の関係は、ExamエンティティとObjectivesエンティティの間にあります。しかし、私はそれを実装する方法を知らない。Viewモデルで多対多テーブルを更新する方法

コントローラー:コードに示すように

[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); 
} 

、多対多のテーブルの更新はView ModelからObjListに基づいています。しかし、私はこれらのメソッドはmethodmodel自体を渡しているとしてこれを実装する方法がわからない

exam.Obj.Add(obj); 

or 

exam.Obj.Remove(obj); 

:私は彼らのようなメソッドを使用して、オンラインチュートリアルを参照しました。私の場合ここではに保存する前にexam変数を作成しなければならないので、viewmodelをメソッドに渡すことです。

多対多テーブルを更新するにはどうすればよいですか?

+0

'db.Exams.Add(exam);' 'db.Exams.Remove(exam);' –

答えて

0

ObjListビューモデルをObjectiveモデルに変換し、コンテキストに追加することができます。

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