2

Entity framework 4.0.과 함께 WPF 응용 프로그램을 만들었습니다. PhoneNumber 테이블에 레코드를 삽입하려고하면 첫 번째 레코드가 성공적으로 삽입됩니다. 그러나, 일부 목록을 통해 내가 루프가 PhoneNumber 테이블에 다른 항목을 삽입 할 때 레코드를 삽입하지만 같은 오류를 보여줍니다오류 : .net의 db.SaveChanges()에서 참조 무결성 제약 조건 위반이 발생 했습니까?

경우 InvalidOperationException이 사용자 코드에 의해 처리되었다 데이터베이스에 변경이 성공적으로 저지른하지만, 오브젝트 컨텍스트를 갱신하는 중 오류가 발생했습니다. ObjectContext가 일관성없는 상태 일 수 있습니다. 내부 예외 메시지 : 참조 무결성 제약 조건 위반이 발생했습니다. 참조 제약 조건을 정의하는 속성 값이 관계의 주체 및 종속 개체간에 일치하지 않습니다. .cs 파일에

코드 :

protected void InsertContact(List<PhoneNumbersList> phoneList,otherparameters here) 
{ 
      Contact contact = new Contact(); 
      PhoneNumber phnumber = new PhoneNumber(); 

      //INSERT into Contacts Table 
      contact.PrefixTitleID = cfnm.PrefixTitleID;// cfnm.Title; 
      contact.FirstName = cfnm.FirstName; 
      contact.MiddleName = cfnm.MiddleName; 
      contact.LastName = cfnm.LastName; 
      contact.Website = webpageaddress; 
      contact.SuffixID = cfnm.SuffixID; 
      contact.Gender = gender; 
      contact.IMAddress = imaddress; 

      db.Contacts.Add(contact); 
      db.SaveChanges(); 
      int contactid=contact.ContactID; 
      if (contactid > 0) 
      { 
       int phid = 0; 
       //INSERT into PhoneNumber Table 
       foreach (var ph in phoneList) 
       { 

        phnumber.PhoneTypeID = ph.PhoneTypeID; 
        phnumber.CountryID = ph.CountryID; 
        phnumber.City = ph.City; 
        phnumber.LocalNumber = ph.LocalNumber; 
        phnumber.Extension = ph.Extension; 
        phnumber.CountryCode = ph.CountryCode; 
        db.PhoneNumbers.Add(phnumber); 
        db.SaveChanges();//Getting Error here 
        phid=phnumber.ID ; 
        if(phid > 0) 
        { 
         //Save in ContactPhoneNumber Table 
         contactphonenumber.ContactID = contactid; 
         contactphonenumber.PhoneNumberID = phid; 
         db.ContactPhoneNumbers.Add(contactphonenumber); 
         db.SaveChanges(); 
        } 
       } 
      } 
} 

PhoneNumber 테이블에 두 번째 레코드를 삽입 한 후 오류가 발생. 어떤 생각?

테이블 구조는 : enter image description here

도움말 높이 평가!

답변

6

phnumber 인스턴스를 한 번만 인스턴스화 한 다음 데이터베이스에 여러 번 삽입하려고합니다. foreach (var ph in phoneList) 블록 안에 PhoneNumber phnumber = new PhoneNumber(); 문구를 이동하십시오.

+1

좋아요! 감사합니다 @ Dabblerni :) –