2010-11-19 1 views
0

여기에 제 시나리오가 있습니다 :Silverlight & RIA & POCO : 두 개의 새 하위 항목을 삽입 할 때 SubmitOperationFailed. 동일한 ID를 가진 엔티티가 존재합니다

Silverlight, RIA 및 POCO 개체 (Entity Framework 없음, Oracle 및 SP와 관련됨)를 사용하고 있습니다.

Child 개체 모음이 포함 된 Parent 개체가 있습니다. 부모에 연결 및 구성 속성을 올바르게 설정했습니다. 변경 내용을 저장하려면 개체 그래프 전체가 서버로 올바르게 보내집니다.

사용자는 부모에게 하나 이상의 Child 개체를 추가 할 수 있습니다.

이제 사용자가 하나의 Child 객체를 부모에 추가하고 저장하면 모든 것이 작동합니다. 지금

System.ServiceModel.DomainServices.Client.DomainOperationException: Submit operation failed. An entity with the same identity already exists in this EntitySet. ---> System.InvalidOperationException: An entity with the same identity already exists in this EntitySet.

이 클라이언트에서 실패 : 사용자가 상위에 두 개 이상의 새로운 개체를 추가하고 유지하려고 할 때, 나는 고전적인 오류가 발생합니다. 나는 모든 것을 추적하고 있습니다 - 데이터베이스가 실제로 업데이트됩니다! 모든 것이 올바르게 서버로 전송되고 DB가 업데이트됩니다. 재 쿼리가 발생했을 때 서버의 객체 키를 확인하고 올바른지 확인합니다. 새 자식 객체는 모두 0에서 순차적으로 실수로 업데이트 된 ID를 얻습니다.

이 오류가 발생하는 클라이언트에서 Parent 개체를 다시로드 할 때가 있습니다. 나는 그것을 얻지 않는다. 다시로드 작업에 대한 새 컨텍스트를 새로 작성 중입니다. 비어 있어야하며 부모 및 관련 하위 항목 만로드해야합니다. 쿼리 방법에서 벗어나기 전에 서버 측의 데이터를 확인합니다. 부모 및 자식 데이터는 문제가 없습니다. 무슨 일 이니? 컨텍스트가 왜이 SubmitOperation을 완료하지 못하는 것에 대해 불평하지 않습니까?

+0

나는 이것을 알아 냈다. 기본적으로, 당신은 일을 수동으로 시도하고 RIA가 당신을 위해 그것을하도록 노력하고 종료해야합니다. –

답변

1

당신은 너무 쉽게 포기했습니다. RIA가 당신을 위해 그렇게하지 못하게하십시오 !! :-) 여기에

이 거래는 ...

당신이 당신의 속성 중 하나에 POCO 객체 (NO EF) 당신이 가장 가능성이 식별 속성이 ([키]) 작업을하고 있기 때문에 그것을 키를 지정 (또는 신원)을 나타냅니다. 이 관리하려하기 때문에 당신이 2 개 연속 객체를 추가 할 때, 당신이 가장 가능성이 0이 값에 키의 값을 기본값으로

음 ... 도메인 서비스 & 상황에 대한 문제가 당신을위한 세트. 개체를 데이터베이스에 저장 한 후에 키를 업데이트하지 않은 경우 키 값은 0으로 유지됩니다.

문제!

도메인 서비스 & 컨텍스트는이 두 개체를 관리되는 EntitySet에 넣으려고하므로 모든 개체가 고유해야합니다.

그래서 ...

길고 ... 데이터베이스에 저장 한 후 키 값을 업데이트한다 그것의 짧은.

+0

예, 예레미야, 제가 알아 낸 것입니다. "Ria가 당신을 위해해라"는 것의 일부입니다 - 변경 세트를 관리 할 수 ​​있도록 키를 제공해야합니다. 그래도 멋진 RIA를 배웠습니다. 나는 그것을 정말로 좋아한다 :-) 고마워! –