2016-09-04 4 views
2

현재 EntityFramework.BulkInsert으로 재생 중입니다.C# 및 EF : bulkinsert 관련 개체

단순 삽입 (16,000 초 1.000.000 행)의 성능에 실제로 도움이되지만 여러 테이블에 매핑 된 개체 삽입에 대한 정보는 찾을 수 없습니다. 그와 관련된 유일한 것은 그것이 가능하지 않다는 공식 웹 사이트의 오래된 (2014) 주제입니다. 아직도 실제입니까?

만약 그렇다면, 좋은 해결책이 있습니까?

+0

불행히도 .... 예. alternatve는 대량 삽입 확장이고 동일한 트랜잭션 내에서 모든 것을 수동으로 업데이트합니다. – ESG

답변

1

EntityFramework.BulkInsert는 간단한 시나리오를 지원하는 매우 훌륭한 라이브러리입니다. 그러나 라이브러리는 제한적이며 더 이상 지원되지 않습니다.

지금까지 단 하나의 좋은 해결책이 있으며 모든 것을 지원하는 라이브러리를 사용하고 있습니다!

면책 조항 : 나는이 프로젝트 Entity Framework Extensions

이 도서관은 모든 협회와 상속을 포함한 모든 지원의 소유자입니다.

예를 들어 여러 테이블을 여러 테이블에 저장하는 경우 BulkSaveChanges은 SaveChanges와 똑같이 작동하지만 속도는 더 빠릅니다.

// Easy to use 
context.BulkSaveChanges(); 

// Easy to customize 
context.BulkSaveChanges(bulk => bulk.BatchSize = 100); 

라이브러리는 삽입하는 것 이상의 역할을합니다. 그것은 모든 대량 작업을 지원합니다

  • BulkInsert
  • BulkUpdate
  • BulkDelete
  • BulkMerge이

그러나 EntityFramework.BulkInsert는 달리,이 라이브러리는 무료로하지 않습니다.

편집 : 응답 subquestion

당신은 빠른 방법은 말 - 당신이 어떤 통계 또는 통계

@ 마크에 대한 링크를해야합니까 : 당신은 우리의 웹 사이트 homepage에 메트릭을 볼 수 있습니다. BulkSaveChanges가 SaveChanges보다 최소 15 배 빠름을보고합니다.

그러나 통계에는 많은 편향이 있습니다. 너무 많은 것들이 지수, 방아쇠, 대기 시간 등과 같은 영향을 미칠 수 있습니다!

사람들은 일반적으로 성능이 25 배, 50 배, 80 배 향상되었습니다.

사람들이 일반적으로 벤치마킹을 수행 할 때 잊어 버리는 것은 JIT 컴파일 테스트 전에 한 번 라이브러리를 호출하는 것입니다! Entity Framework와 마찬가지로 라이브러리의 첫 번째 히트에는 몇 밀리 초가 걸릴 수 있습니다.

+0

당신은 * 빠른 방법이라고 말합니다 * - 메트릭이나 메트릭에 대한 링크가 있습니까? 그냥 호기심 –

1

대량 삽입 문제가있는 경우 EF를 사용하지 않습니다. EF는 응용 프로그램의 일반적인 사용 상황에서 엔티티를 나타내는 객체를 매핑하기위한 것으로, 주어진 트랜잭션이 실제로 하나의 엔티티 만 처리해야합니다 (엔티티가 현저한 일관성 경계 주위에 설계되었다고 가정).

(가져 오기/내보내기/변환 등) 많은 데이터를 이동하는 경우 SQL을보다 직접적으로 사용하여 제어 할 수 있습니다.