2012-07-24 3 views
0

현재 우리는 로컬 호스트의 WampServer에서 MySQL 데이터베이스를 실행하고 있습니다. 몇 가지 클래스가 있으며 POCO 클래스를 사용하여 데이터베이스 테이블에 매핑했습니다.Context.SaveChanges() 중복 문제가 발생했습니다

우리는 모든 생성, 편집 및 삭제를 처리하기위한 저장소를 표준으로 제공합니다. 우리는이 저장소에 Question 객체를 전달합니다.이 질문 객체는 id, text와 같은 기본 속성을 가지며 해당 질문에 대한 모든 대답에 연결하는 탐색 속성도 포함합니다.

질문의 poco 클래스에서 모든 대답은 ICollection으로 저장됩니다. 이것은 문제없이 업데이트 및 삭제하고 생성 할 수있는 주 동안 잘 작동했습니다.

갑자기 우리가 질문을 편집하려고 할 때 갑자기 대답이 기하 급수적으로 중복됩니다. 2가 4가되어 8이되었는데 우리가 알아 내기 전에 우리가 풀려고했던 것처럼 거의 60k의 답변을 가졌습니다. 이 문제.

질문 편집 저장소의 코드 :

public void EditQuestion(Question question) 
    { 
     var tempquestion = Context.Questions.Single(q => q.Question_Id == question.Question_Id); 

     tempquestion.Question_Help = question.Question_Help; 
     tempquestion.Question_Text = question.Question_Text; 
     tempquestion.Question_Type = question.Question_Type; 

     context.SaveChanges();} 

우리는 응답 속성을 확인, 모든 라인에 중단 점과이 너무 많은 시간을 통해 강화했습니다, 그것은 전체에 걸쳐 정확한 숫자로 유지를 프로세스에 도달하면 context.saveChanges()를 호출하고 갑자기 결과가 복제되면이를 복제합니다.

내가 이것에 대한 엔티티 프레임 워크를 사용하고 있음을, 내가 지정한해야합니다

또한 노트와 코드를 요청했다.

public int Question_Id { get; set; } 

    public string Question_Text { get; set; } 

    public string Question_Help { get; set; } 

    public string Question_Type { get; set; } 

    [Display(Name = "Set ID")] 
    public int Set_Id { get; set; } 

    public Set Set { get; set; } 

    private ICollection<Answer> _answers; 
    public ICollection<Answer> Answers 
    { 
     get 
     { 
      if (_answers == null) 
      { 
       _answers = Arep.GetAnswers(this.Question_Id); 
      } 
      return _answers; 
     } 
     set 
     { 
      _answers = value; 
     } 
    } //a collection of answers belonging to this question 

편집 2 :

질문에 대한 나의 POCO 클래스는 이것이다 나는 지금 더 가까이 실제 문제에 큰 단계가 될 수있다 생각합니다. CodeCaster의 유용한 링크 덕분에 마지막 쿼리를 통해 확인했는데, 2 개의 대답이있을 때 예상되는 2 개의 삽입 문만 실행되지만 총 4 개의 응답으로 끝나는 메신저는 분명히 진짜 문제는 새로운 질문을 추가한다는 것입니다. 답변이 수정 된 질문과 함께 전달되었을 때.

수정 사항을 적용하면 수정 된 질문을 답장하지 않고 보낼 수 있습니다. 그러면 새 질문이 삽입되지 않고 중복되지 않습니다.

+0

POCO는 어떻게 생겼습니까? DAL에 무엇을 사용하고 있습니까? 엔티티 프레임 워크? –

+0

게시 한 코드에 문제가 없으므로 [쿼리 기록] (http://stackoverflow.com/questions/650238/how-to-show-the-last-queries-executed-on-mysql)을 참조하십시오. 그 복제물이 거기에서 비롯 됐는지 확신합니까? – CodeCaster

+0

@SteenT 예 엔티티 프레임 워크, poco 클래스의 편집을 참조하십시오. – RhysW

답변

0

문제가, 당신의 질문에서이 문제가 해결되는지 그래서 아무 생각이 읽을 수 없습니다, 뭔지 생각,하지만 난 그렇게 같은 POCO 만들 것 :

public class Question { 
    public int Question_Id { get; set; } 
    public string Question_Text { get; set; } 
    public string Question_Help { get; set; } 
    public string Question_Type { get; set; } 
    [Display(Name = "Set ID")] 
    public int Set_Id { get; set; } 
    public Set Set { get; set; } 
    public virtual ICollection<Answer> Answers { get; set; } 
} 

는 답변이 있습니까 ID 필드? 나는 그들이 EF와 함께 사용될 때 그들이하는 것처럼 생각한다.

0

실행 된 모든 쿼리를 기록하는 방법에 대한 CodeCaster의 유용한 팁 덕분에 정확한 양이 추가되었음을 알 수있었습니다.

문제는 답변을 추가하지 않아야한다는 사실에 달려있었습니다! 하지만 질문 속성은 내가 질문을 업데이트 할 때마다 해답을 얻었 기 때문에 모든 답변을 다시 추가했습니다! 따라서 정확한 숫자가 변경 사항을 저장하는 전체적인 방법을 보았지만 그 다음은 잘못된 숫자가되었습니다.

감사합니다. CC!

관련 문제