저는 EF4.1, RIA Services 및 Silverlight로 작업하고 있습니다. 업데이트 시나리오에서 다소 기괴한 문제가 있습니다.RIA 서비스로 엔티티를 업데이트 할 때 이상한 InvalidOperationException이 발생했습니다.
도메인 모델은 매우 간단합니다. 요청을 처리합니다. 및 사람입니다. 그들은 1 대 n의 관계를 가지고 있습니다. 따라서 시민은 복수 요청을 할 수 있습니다. 실제로는 앱이 이후 앱이 단순히 그렇게 할 수있는 기능을 제공하지 않기 때문에 결코 발생하지 않습니다.
요청 내가 사실로 변경 한 다음 저장하려고 '긴급'이라는 속성이 있습니다. (. 내가 디버깅 목적으로 추가 한 시도/catch 핸들러 제외) RIA 서비스로 거의 표준 생성 방법이다 그때 얻을 수있는 다음과 같은
public void UpdateRequest(Request currentRequest)
{
Request original = ChangeSet.GetOriginal(currentRequest);
try
{
ObjectContext.Requests.AttachAsModified(currentRequest, original);
}
catch (Exception ex)
{
// weirdness here!
}
}
: 실제 계속 발생이 방법을 통해 시작할 때까지 모두 잘 어울리는 오류 :
변경 세트를 확인하면 이 표시되지 않습니다. 추가 요청이 있으므로 실수로 추가하지 않았을 것입니다.
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
내가이 이해가 안 ... ObjectStateManager에서 더 추가 객체가 그대로이 없습니다, 변경 집합은 더 개체를 추가 없습니다; 도대체이게 어디서 온거야? 어느 속성이 변경되었는지를 추적 했으므로 키를 덮어 쓰지 않아도되고 추가되거나 다른 펑키가 아닌지 확신합니다.
여기에 어떤 빛을 비추어 줄 수 있습니까? 지금까지 며칠 동안 나를 미치게 만들었습니다 ...
다른 곳에서 추가하는 것이 문제라고 생각하지 않습니다. 이 업데이트 메소드를 실행하기 전에 엔티티를로드했을 가능성이있는 코드가 있습니까? 같은 왕복에서 실행되는 다른 쿼리는 무엇입니까? –
CallStack 윈도우에서 무엇을 볼 수 있습니까? 지속적인 작업 호출을 추적 할 수 없습니까? –
앤서니 페 그램 (Anthony Pegram)이 언급했듯이 같은 키를 사용하여 엔티티를로드하면 모델을 첨부 할 수 없습니다. 변경 사항은 첨부 된 엔터티에 적용되어야합니다. – Ouarzy