2016-08-04 7 views
0

親と子のリストが存在するビューからモデルオブジェクトを投稿し、データベースからフェッチするオブジェクトを別に取っています。asp.net mvcでモデルバインドを使ってレコードを更新、削除する

public bool ChildRecords(CheckListTemplate questList) 
     { 
      int templateId = questList.Id; 
      if (templateId > 0 && questList.Questions.Count() > 0) 
      { 
       var template =DBContext.CheckListTemplates.Include(p => p.Questions).SingleOrDefault(p => p.Id == templateId); 
       template.Name = questList.Name; 
       List<CheckListQuestion> delQuestions = new List<CheckListQuestion>(); 
       foreach(CheckListQuestion q in template.Questions) 
       { 
        var question = questList.Questions.Where(x => x.Id == q.Id).FirstOrDefault(); 
        if (question == null) 
        { 
               delQuestions.Add(q); 
        } 
        else 
        { 
         q.Question = question.Question; 
         q.Clause = question.Clause; 
        } 
       } 
       if(delQuestions.Count()>0) 
       { 
        foreach(CheckListQuestion qst in delQuestions) 
        { 
         var itemToRemove = template.Questions.Single(r => r.Id == qst.Id); 
         template.Questions.Remove(qst); 
        } 
       }     
DBContext.Entry(template).State = EntityState.Modified; 
       DBContext.SaveChanges(); 
} 

私が更新しrecords.Ifを削除私は録音機能は正常に動作を更新するが、ときに私はDBContext.Entry(テンプレート).State = EntityState.Modified、レコードを削除し、ビューを投稿しています。 はエラーを出しています。レコードを削除するにはどうしたらいいですか?コード内には何がないのですか。

答えて

0

私たちとエラーを共有するとよいでしょう。しかし、あなたのコードを見て、おそらくあなたが直面しているエラーは、あなたがループ内のいくつかのレコードを削除しようとしていると動作しないためです。

削除するレコードのIDのみをメモリに保存することで、コードを簡素化できます。例:

+0

私はループ内のレコードを削除していません。オブジェクトリストを追加するだけで、ループが終了したら後で削除します。エンティティの状態を変更して1つのオブジェクトリストを操作したい。 –

+0

これはできません。それは私が話していることです.... foreach(delQuestionsのCheckListQuestion qst) { var itemToRemove = template.Questions.Single(r => r.Id == qst.Id); template.Questions.Remove(qst); } 何らかの理由で実際にこれを行う必要がある場合は、foreachの代わりにforを使用してください。 –

関連する問題