2012-04-24 3 views
1

사용자가 필드를 채우는 마법사 단계가 있습니다. 그런 다음 json을 사용하여 각 마법사 단계마다 데이터베이스에 값을 저장합니다. 그러나 내 저장소에는 savechanges()가 있습니다. 그러나 변경 사항을 저장하지 않고 대신 오류가 발생합니다.엔터티 프레임 워크 savechanges 오류

Entities in 'NKImodeledmxContainer.SelectedQuestion' participate in the 'QuestionSelectedQuestion' relationship. 0 related 'Question' were found. 1 'Question' is expected.

누구든지 오류를 제거하는 방법을 알고 계십니까? 질문에서 ID를 받아 내 데이터베이스에 저장해야합니까, 아니면 EF에서 무언가를 변경하여 오류 메시지가 표시되지 않도록 할 수 있습니까?

이것은 내 컨트롤러 내 게시물 :

 [HttpPost] 
    public JsonResult AnswerForm(int id, SelectedQuestionViewModel model) 
    { 
     bool result = false; 
     var goalCardQuestionAnswer = new GoalCardQuestionAnswer(); 
     goalCardQuestionAnswer.SelectedQuestion = new SelectedQuestion(); 

     goalCardQuestionAnswer.SelectedQuestion.Id = model.QuestionID; 
     goalCardQuestionAnswer.Comment = model.Comment; 
     goalCardQuestionAnswer.Grade = model.Grade; 

      if (goalCardQuestionAnswer.Grade != null) 
      { 

        answerNKIRepository.SaveQuestionAnswer(goalCardQuestionAnswer); 
        answerNKIRepository.Save(); 
        result = true; 
        return Json(result);     
      } 

     answerNKIRepository.SaveQuestionAnswer(goalCardQuestionAnswer); 
     answerNKIRepository.Save(); 

     return Json(result); 
    } 

내 저장소

public class AnswerNKIRepository 
{ 
    private readonly NKImodeledmxContainer db = new NKImodeledmxContainer(); 

    public List<SelectedQuestion> GetAllSelectedQuestionsByGoalCardId(int goalCardId) 
    { 
     return db.SelectedQuestion.Where(question => question.GoalCard.Id == goalCardId).ToList(); 
    } 

    public void SaveQuestionAnswer(GoalCardQuestionAnswer goalCardQuestionAnswer) 
    { 
     db.GoalCardQuestionAnswer.AddObject(goalCardQuestionAnswer); 
    } 

    public void Save() 
    { 
     db.SaveChanges(); 
    } 
} 

이 내 뷰 모델입니다 :

: 이것은 내 데이터베이스 모델이

public class SelectedQuestionViewModel 
{ 

    public int? Grade { get; set; } 
    public string Comment { get; set; } 
    public string SelectedQuestionText { get; set; } 
    public int QuestionID { get; set; } 
} 

입니다 enter image description here

+0

질문에서 가장 중요한 부분 인 저장소에서 무슨 일이 일어나고 있는지 표시하고 있지 않습니다. –

+0

리포지토리로 업데이트 됨 –

답변

1

예외는 SelectedQuestion.Question이 필수 탐색 속성이지만 사용자 코드에서이 속성을 설정하지 않는다고 불평합니다. 저장소에서 ID로 질문을로드하고 SelectedQuestion.Question 참조로 설정하려고 :이 줄을 교체 ...

goalCardQuestionAnswer.SelectedQuestion.Id = model.QuestionID; 

을 ... 추가

goalCardQuestionAnswer.SelectedQuestion.Question = 
    answerNKIRepository.GetQuestionById(model.QuestionID); 

...에 의해 그리고 저장소에 방법 :

public Question GetQuestionById(int id) 
{ 
    return db.Question.Single(q => q.Id == id); 
} 
+0

해당 코드를 사용하면 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다"라는 오류 메시지가 나타납니다. –

+0

@ps__ : 어떤 코드 줄에서이 오류가 발생합니까? – Slauma

+0

다음 줄을 대체해야한다고 말했습니다. "goalCardQuestionAnswer.SelectedQuestion.Question = AnswerNKIRepository.GetQuestionById (model.QuestionID);" –

관련 문제