2011-11-21 1 views
1

나는 두 개의 테이블이 있습니다Entity Framework에서 외부 조인을 사용하여 여러 테이블을 단일 엔터티로 매핑하는 방법은 무엇입니까?

송장을 (ID, InternalPrice, ExternalPrice)
인보이스 요약 (InvoiceID, 분산) 우리는 송장 테이블을 통해가는 과정이이 응용 프로그램에서

작성 Entity Framework의 개체 표현 그런 다음 응용 프로그램은 (InternalPrice - ExternalPrice)의 차이를 계산하고이를 Variance 열에 저장해야합니다.

엔티티 프레임 워크가 많은 수의 행 (~ 5 백만)에서이를 효율적으로 수행 할 수 있도록하기 위해 계산 결과를 개별 테이블로 분리했습니다. 이를 통해 개체 표현을 사용하여 분산 (다른 비즈니스 논리와 함께)을 계산 한 다음 'SQL 대량 삽입'을 사용하여 데이터를 데이터베이스에 빠르게 삽입 할 수 있습니다 (일반 Entity 업데이트보다 훨씬 빠름).

송장 & InvoiceSummary 테이블을 단일 엔터티 개체로 병합하고 위에 설명 된 BCP 묵인성에 대한 별도의 테이블을 유지하고 싶습니다. 그러나 InvoiceSummary에 항상 일치하는 행이있는 것은 아닙니다.

Entity Framework에서 병합 된 엔터티를 구현하기 위해 두 테이블간에 1 대 1 매핑이 필요합니다. 누구도 Entity Framework에 0 대 1 매핑을 표시 할 수있는 방법을 알고 있습니까?

엔티티 프레임 워크 솔루션을 찾을 수없는 경우 뷰를 사용하여 기본 테이블 구조를 숨길 수 있습니다. 업데이트 가능한 뷰를 지원하는 SQL 서버를 사용하고있어서 EF에 투명해야합니다. 대체 구조 솔루션도 환영합니다.

+0

I을 내가 찾고있는 엔티티 구조를 생성하기 위해 뷰를 사용하려고 시도했다. SQL Server는 업데이트 가능한 뷰를 지원하지만 EF는 읽기 전용 엔터티 개체를 만듭니다. 불행히도 이것은 업데이트 요구가 있기 때문에 내 요구 사항에 맞지 않습니다. EDML을 수동으로 변경하여 뷰에 업데이트를 적용 할 수 있다는 것을 알고 있습니다.하지만 모델에서 데이터베이스를 업데이트 할 때마다 이러한 수동 편집을 다시 적용해야합니다. 다른 방법이 없다면 이것은 뒤로 물러 설 것 같습니다. – Matt

답변

1

결론 엔티티 분할 (여러 엔티티로 분할)은 테이블간에 1 : 1 관계가 필요하다는 결론에 부합합니다. 데이터베이스에보기를 추가 할 수있는 능력이 있다면, 그 경로를가는 것이 가장 좋다고 생각하고 그보기를 단일 엔티티에 매핑하는 것입니다. 이 제안 된 솔루션에는 큰주의가 있습니다. 데이터베이스에서 업데이트 할 수있는 뷰를 만들 수 없다면 읽기 전용 뷰가 제공되며 EDMX (디자이너)를 사용하여 읽기 전용 뷰에만 매핑 할 수 있습니다. 코드 첫 번째는 읽기 전용보기로의 매핑을 지원하지 않습니다. 당신이 결과를 조회 할 필요가없는 경우, 당신은 TEH 데이터베이스에 저장 프로 시저를 만들 수

  • :

    는 몇 가지 다른 옵션이 있습니다. 그것은 EDMX 의 함수에 매핑되거나 코드의 함수를 통해 먼저 실행될 수 있습니다.

  • 결과를 쿼리해야하고 EDMX를 사용할 필요가있는 경우 여전히 지도를보기로 이동하면 이동하는 방법입니다.
  • 코드를 먼저 사용하고 결과를 쿼리해야하지만 읽기 전용이 좋으면 dbcontext.database.executecommand를 사용할 수 있습니다.

HTH는 (내가있어 희망이 메모리에서 이후 모든 맞 ... 나는 신뢰하지 않는 ... 내가 책에서 다운이 물건을 쓰는 이유입니다!)

+0

응답 주셔서 감사합니다. SQL Server 2005를 사용하고 있으므로 업데이트 가능한보기가 지원됩니다. 나는 위에서 계산 한 것처럼이 계산이 많은 '치프'는 아니므로 분산 계산의 결과를 저장해야합니다. 그러나 함수 매핑은 좋은 생각이며, 다른 곳에서도 사용할 수 있습니다. 저는 실제로 여기에서 코드를 처음 사용하지 않고 있습니다.하지만 둘 중 어느 것이 든 작동 할 수 있다고 생각합니다. 감사합니다. – Matt

+0

BTW, 당신의 응용 프로그램에서 EF와 SQLBulkInsert를 결합하는 방법에 관심이 있습니다. 나는 그들이 완전히 무관계 한 조작이라고 추측하지만 그렇지 않다면 매우 관심이 있습니다! (몇 가지 아이디어가 있지만 ...)이 게시물의 주제와 완전히 관련이 없으므로 언제든지 오프라인에서 나를 두려워 해주십시오. [http://thedatafarm.com/blog/contact/] –

+0

저는 두 사람을 가깝게 지키려고 노력하고 있습니다. 나는 당신에게 다른 세부 사항을 ping 할 것이다. 저는 현재 개념 증명을 통해 작업하고 있습니다. – Matt