2012-09-11 3 views
0

MVC에서 응용 프로그램을 만들고 있습니다. SQL Server 2008에 데이터를 삽입하려고하면 다음과 같은 오류가 표시됩니다.오류를 표시하는 sqlserver에 데이터를 삽입 할 때

ObjectStateManager에 동일한 키가있는 개체가 이미 있습니다. 기존 개체가 변경되지 않은 상태입니다. 객체가 추가 상태에있는 경우에만 을 ObjectStateManager에 다시 추가 할 수 있습니다.

이것은 무엇을 의미합니까?

 Candidate candidate = _repository.GetCandidate(LoggedInCandidate.Id); 

      candidate.Name = collection["Name"]; 
      candidate.Email = collection["Email"]; 
      candidate.Address = collection["Address"]; 
      candidate.ContactNumber = collection["ContactNumber"]; 
      candidate.MobileNumber = collection["MobileNumber"]; 
      candidate.LicenseNumber = collection["LicenseNumber"]; 
      int candidateId = _repository.AddCandidate(candidate); 
      string[] languages = collection["Languages"].Split(','); 
     foreach (string language in languages) 
     { 
      if (!string.IsNullOrEmpty(language)) 
      { 
       CandidateLanguage cl = new CandidateLanguage(); 
       cl.CandidateId = candidateId; 
       cl.LanguageId = Convert.ToInt32(language); 
       _repository.AddCandidateLanguage(cl); 
      } 
     } 

      _repository.Save(); 
      } 
+2

할 수 있습니다. 정확히 무엇이이 코드로 이어질 수 있는지 알려면 코드를보아야합니다. –

+1

데이터베이스에 삽입하고 db.SaveChanges()를 호출하는 컨트롤러 코드를 표시하십시오. –

답변

0

이미 ID가있는 후보를 얻었습니다. 왜이 후보를 컨텍스트에 다시 삽입합니까?

새 후보를 삽입하려면 새 후보를 만들어 삽입해야하는 이유는 무엇입니까?

+0

GetCandidate()에 대한 저장소에 메소드가 있습니다. 그냥이 함수를 호출합니다. 후보 ID를 데이터베이스에서 가져오고 다른 값을 같은 ID에 저장하기 위해 CandidateId를 삽입했습니다. 나는 왜 그것이 오류를 보여줄지 모릅니다. – Duk

+0

받는 후보자의 다른 값을 저장하려면이 후보자 만 업데이트하면됩니다. – stevenqb1890

+0

나는 그것을 고치겠습니다. 귀하의 의견에 감사드립니다. 후보 ID를 후보 ID로 지정합니다. 그런 다음 추가됩니다. – Duk

0

기존 엔티티를 복제하고 그 후에 일부 속성 만 수정하려면 복사 생성자 (또는 비슷한 생각을 가진 무언가)가 필요하며 db에 새 엔티티를 삽입하십시오.

당신이 당신의 현재 후보를 수정하려는 경우 그것은 동일한 유형의와 동일한 ID를 가진 엔티티가 이미 컨텍스트에로드 된 중복이 허용되지 않음을 의미

 Candidate candidate = _repository.GetCandidate(LoggedInCandidate.Id); 

     candidate.Name = collection["Name"]; 
     candidate.Email = collection["Email"]; 
     candidate.Address = collection["Address"]; 
     candidate.ContactNumber = collection["ContactNumber"]; 
     candidate.MobileNumber = collection["MobileNumber"]; 
     candidate.LicenseNumber = collection["LicenseNumber"]; 

     _repository.Entry(candidate).State = EntityState.Modified; 

     .... 

     _repository.Save(); 
관련 문제