2008-10-23 5 views
3

데이터 가져 오기를 수행하는 데 사용하는 ADO.Net 데이터 서비스가 있습니다. 대부분의 엔티티에 연결된 여러 엔티티가 있습니다. 가져 오는 동안 그렇게하기 위해 먼저 해당 엔터티를 만들고 저장 한 다음 .SetLink (EntityImport, "NavigationProperty", CreatedEntity)를 사용합니다. 이제 내가 겪었던 첫 번째 이슈는 컨텍스트가 CreatedEntity에 대해 항상 알지 못했다는 것입니다 (이는 각 엔티티가 독립적으로 가져오고 각 항목이 생성 될 때 컨텍스트를 만드는 데 기인합니다 -이 기능을 유지하고 싶습니다. - 즉, 나는 "단지 하나의 문맥을 사용"하는 것을 피하려고 노력하고있다.ADO.Net Data Services에서 엔티티가 이미 컨텍스트에 있는지 확인하는 방법은 무엇입니까?

그래서 SetLink를 호출하기 전에 .AddToCreatedEntityType (CreatedEntity)이 있습니다. 이것은 처음에는 물론 작동하지만 두 번째 패스에서 "컨텍스트가 이미 엔티티를 추적 중입니다"라는 오류 메시지가 나타납니다.

컨텍스트가 이미 엔터티를 추적하고 있는지 확인하는 방법이 있습니까 (context.Contains (CreatedEntity)가 아직 구현되지 않았습니까?)? 시도 잡기를 시도하고 오류를 피하려고 생각했지만, 각 패스마다 새로운 CreatedEntity를 만드는 것으로 보입니다. 매번 CreatedEntity를 가져 오기 위해 LINQ to Data Services를 사용해야하는 것처럼 보이지만, 이는 비효율적 인 것처럼 보입니다 - 어떤 제안입니까?

답변

5

엔티티의 EntityState 속성을 살펴 봐야한다고 생각합니다.

값이 EntityState.Detached 인 경우에만 컨텍스트에 추가해야합니다.

이 열거 형은 멤버 값의 비트 조합 할 수있는 FlagsAttribute 속성이 있습니다

는 다음과 같은 말을 잊지 마십시오.

난 확장 메서드를 만들 것입니다 :

public static class EntityObjectExtensions 
{ 
    public static Boolean IsTracked(this EntityObject self) 
    { 
     return (self.EntityState & EntityState.Detached) != EntityState.Detached; 
    } 
} 
3

나는 상황에 맞는 것을 발견했을 때 나는 꽤보고 실망했다 문맥 I 업데이트 원하는 엔티티를 추적되었는지 여부를 확인 (또는 추가) 시도 .Entites.Contains (currentItem)가 작동하지 않았습니다. 이없는 경우, 무엇을

if (context.Entities.Where(entities => entities.Entity == currentItem).Any()) 
{ 
    this.service.UpdateObject(currentItem);      
} 
+1

:

나는 사용하여 주위를 얻었다. 다른 부분은 무엇을 의미합니까? – Mohanavel

관련 문제