현재 우리는 로컬 호스트의 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 개의 응답으로 끝나는 메신저는 분명히 진짜 문제는 새로운 질문을 추가한다는 것입니다. 답변이 수정 된 질문과 함께 전달되었을 때.
수정 사항을 적용하면 수정 된 질문을 답장하지 않고 보낼 수 있습니다. 그러면 새 질문이 삽입되지 않고 중복되지 않습니다.
POCO는 어떻게 생겼습니까? DAL에 무엇을 사용하고 있습니까? 엔티티 프레임 워크? –
게시 한 코드에 문제가 없으므로 [쿼리 기록] (http://stackoverflow.com/questions/650238/how-to-show-the-last-queries-executed-on-mysql)을 참조하십시오. 그 복제물이 거기에서 비롯 됐는지 확신합니까? – CodeCaster
@SteenT 예 엔티티 프레임 워크, poco 클래스의 편집을 참조하십시오. – RhysW