2012-11-08 3 views
1

저장소로 SQL Azure를 사용하고 있습니다.EF를 사용하여 병합 삽입 및 업데이트

새로운 레코드와 이전 레코드가 모두있는 데이터 세트 (엔티티 목록)가 있습니다. 어떤 레코드가 업데이트 또는 삽입인지 식별 ​​할 방법이 없습니다. 나는 그것을 (업데이트 또는 삽입을 의미하는) 무엇을 할 지 정체 될 몇 가지 진술을 사용하여 DB에 모든 것을 보내는 방법이 필요하다.

나는 객체 컨텍스트를 사용하여 병합을 찾을 수 있었지만 그렇지 않다. 내 목적에 부합한다.

불명확 한 점이 있으면 질문하십시오.

+0

명백한 해결책이 있습니까? 즉, 목록을 반복하고, DB에 존재하는 각 데이터베이스에 대해 쿼리 한 다음 상태를 수정 됨으로 설정했는지 또는 추가했는지 - 옵션이 없는지 여부입니다. – Slauma

+0

데이터가 꽤 크고 예 옵션이지만 시간이 많이 걸릴 것입니다. 내가 왜 그것을 피하려고 노력하고 있는지. –

+0

목록을 반복하는 것보다 EF를 사용하는 다른 방법이 없다고 생각합니다. 유일한 대안은 아마도 전달 된 목록을 가져오고 업데이트 또는 데이터베이스에 직접 삽입하는 저장 프로 시저를 작성하는 것입니다. – Slauma

답변

0

여기에 몇 가지 옵션이 있지만, 모두 EF에서 어떤 엔티티가 새로운 엔티티인지 오래된지를 알고 있어야합니다.

  • EF가 변경 내용 추적을 수행하도록하십시오. 즉, 동일한 컨텍스트 인스턴스에서 쿼리하고 저장합니다. 이것은 명백한 해답입니다. 귀하의 건축이 이것을 허용하지 않거나 질문을하지 않는다고 가정하기 때문에 나는 그것에 대해 너무 많이 말하지 않을 것입니다.
  • 엔티티의 특성이 오래되었거나 새로운지를 알 수 있습니다. 이것은 EF 변경 추적을 사용할 수없는 경우 가장 많이하는 일입니다. 보통 이것은 기본 키 값을 사용하여 수행됩니다. 예를 들어, 0/음수/새로운 엔티티의 경우 null, 이전 엔티티의 경우 기타 모든 값이 있습니다.
  • 각 엔티티에 대한 데이터베이스를 쿼리하여 존재하는지 확인하십시오.
관련 문제