2011-03-23 7 views
0

내부에 EntityCollection이있는 개체가 있습니다. 그냥 새로운 엔티티를 추가하면 모든 것이 잘 작동합니다. 여기를 수행하는 코드 :컬렉션을 엔티티에 올바르게 저장하는 방법은 무엇입니까?

Context.ApplyChanges() 
Context.SaveChanges() 

그러나 나는 다음과 같은 메시지가 엔티티를 업데이트하려고하면 :

대해 AcceptChanges를 계속할 수 없습니다 때문에 의 다른 개체와 개체의 키 값 충돌 ObjectStateManager. AcceptChanges를 호출하기 전에 키 값이 고유한지 확인하십시오.

같은 컬렉션 개체를 사용하는 경우에도 마찬가지입니다. 즉 새로운 개체 인 경우 데이터베이스에 저장되기 때문에 컬렉션에 같은 개체 개체가 존재할 수 없습니다. 그러나! 별도의 엔티티에 동일한 코드를 콜렉션에 적용하려고하면 저장되지만 다시 객체 (컨테이너)에 적용하려고하면이 오류가 발생합니다. 도움

+0

질문을 수정하고 오류가 발생했을 때 수행 한 작업을 보여주는 코드를 제공하십시오. 엔티티를 어떻게 검색했는지 설명하십시오. –

답변

0

에 대한

감사는 다음 변경 사항을 저장, 적절하게 그 실체를 수정, 당신은 Context에서 변경하려는 개체를 검색하려고 했습니까? 그렇다면보다 자세한 예제를 제공 할 수 있습니까?

+0

네, 그렇게합니다. 우선 엔티티를 데이터베이스에 저장 한 다음 가져 와서 변경 (컬렉션에 객체 추가)하고 다시 저장하려고하면 실패합니다. – mimic

+0

@Seacat "컬렉션에 개체를 추가 하시겠습니까?" 그것은 명백하게 보일지도 모르지만, 실제로, 당신은 대상으로 무엇을하고 있습니까? – Andrew

+0

컬렉션에 Object가 있습니다. TrackableCollection입니다. 새 엔티티를 추가하고 컨테이너 객체를 저장하기 만하면됩니다. 모든 것이 저장됩니다. 그런 다음 컬렉션에 새 객체를 추가하고 저장하려고하면 실패합니다. – mimic

0

모델이나 테이블 스키마에서 무언가를 생략했다고 의심됩니다. 이것은 모델 기본 키가 자동 생성 될 것으로 예상되지만 테이블/모델 코드가이를 정의하지 않으면 내가 기대할 수있는 것입니다. 그런 다음 컬렉션의 개체에 대한 기본 키를 모두 0으로 설정하고 두 번째 개체를 삽입 할 때 기본 키 위반이 발생합니다.

+0

불행하게도 키는 자동 생성되지 않습니다. 하지만 문제가된다면 새로운 객체에 2 개의 새로운 엔티티를 추가하고 객체를 저장하면 모든 것이 저장되지만 컬렉션의 엔티티 중 하나와 함께이 객체를 이미 가지고있는 경우에는 같은 시간에 문제가 발생하는 것입니다. 두 번째 (첫 번째 경우와 동일) 실패합니까? – mimic

+0

@ Seacat - 당신이 묘사 한 것을 바탕으로 한 추측이었습니다. 나는 당신이 말한 것을 해석했다. 단지 엔티티 만 추가했다면 작동하지만 엔티티를 연관된 오브젝트와 함께 추가했다면 그렇지 않다는 의미이다. 그래서 관련된 객체의 키가 잘못되었을 수도 있습니다. 테이블의 PK가 IDENTITY 열로 설정되지 않은 경우 비슷한 오류가 표시되기 전에 int에 대한 기본값은 0이므로 (항상 null이 아니므로) – tvanfosson

+0

감사합니다. 테이블의 키를 확인한 다음 결과에 대해 알려줍니다. – mimic

관련 문제