0

Entity Framework 및 SQL Server Compact를 사용하여 첫 번째 프로젝트를 만들었습니다.Entity Framework에서 데이터베이스 삽입 성능을 향상시키는 방법

데이터베이스에는 모든 테이블에 대해 외래 키가있는 약 15 개의 테이블이 있습니다. 수천 개의 XML 파일을 읽고 데이터를 데이터베이스로 가져와야합니다. 데이터베이스 구조는 XML 파일 구조를 반영합니다. 최대 5 단계의 테이블 계층 구조가 있습니다. 그래서 "상위"테이블의 각 레코드에 대해 기본 테이블에 하나 이상의 레코드를 삽입해야합니다.

삽입을 위해 Entity Framework를 사용하고 있는데 성능이 매우 좋지 않지만 성능이 매우 좋지 않습니다. ( 주된 문제는 대부분의 레코드에서 ID가 다시 읽혀서 레코드에 사용되어야한다는 것입니다. 기본 테이블

다른 것은 즉 -. 내가 잘 알고있는 경우 -.? 엔티티 프레임 워크는 별도의 명령을 각 레코드를 삽입하는 것이

극적으로 성능을 향상시킬 수있는 방법이 있나요

당신에게

감사
+0

성능이 문제가되는 경우 가장 쉬운 해결 방법은 수동 SQL 쿼리입니다. – Kilazur

+0

이것은 한 번 (초기화) 동작입니까? 그런 다음 SQL Server에서 모든 제약 조건을 비활성화 할 수 있습니다. 이렇게하면 성능이 향상됩니다. 그러나 유효한 데이터 만 삽입하십시오. 삽입 한 후 제약 조건을 다시 활성화하십시오. –

답변

0

SQL Compact Bulk Insert Library 라이브러리를 사용하여 데이터를 대량으로 삽입하십시오.

  • 그런 다음 저장된 실행 대량의 라이브러리가 준비 테이블에 삽입

    1. 가 데이터베이스
    2. 사용에 준비 테이블을 만들기 : 당신이 어떤 레코드를 업데이트해야하는 경우

      ,이 기술을 사용 스테이징 테이블에서 읽고 목표 테이블의 레코드를 갱신하여 갱신을 수행하는 프로 시저.

  • +0

    힌트를 가져 주셔서 감사합니다. 내가 모르는 것은 - 삽입 된 행의 ID는 어떻게 얻습니까? 나는 다른 테이블에 삽입에 대한 참조로 그들을 필요합니다. – BitEater

    +0

    키 값을 미리 확인하고 사용할 옵션을 설정할 수 있습니다. INDENTITY_INSERT ON – ErikEJ

    0

    먼저 AddRange 또는 대체 솔루션을 사용하여 DetectChanges 메서드로 인해 성능이 저하되지 않도록하십시오.

    참조 : http://entityframework.net/improve-ef-add-performance

    면책 조항 : 나는 Entity Framework Extensions

    이 라이브러리 지원 의 SQL Server Compact 기본적으로

    를 포함한 모든 주요 제공 업체의 소유자 해요, BulkInsert 자동으로 ID를 얻을 삽입 된 행의

    이 라이브러리는 당신이 당신의 시나리오에 필요한 모든 대량 작업을 수행 할 수 있습니다 :

  • 대량 업데이트
  • 대량 병합
  • 벌크
  • 대량 삭제 삽입

    • 대량 SaveChanges를을

    // Easy to use 
    context.BulkSaveChanges(); 
    
    // Easy to customize 
    context.BulkSaveChanges(bulk => bulk.BatchSize = 100); 
    
    // Perform Bulk Operations 
    context.BulkDelete(customers); 
    context.BulkInsert(customers); 
    context.BulkUpdate(customers); 
    
    // Customize Primary Key 
    context.BulkMerge(customers, operation => { 
        operation.ColumnPrimaryKeyExpression = 
         customer => customer.Code; 
    }); 
    
  • +0

    해답을 찾아 주셔서 감사합니다. Entity Framework의 문제를 해결할 수는 있지만 CodingYoshi의 솔루션은 필자의 경우 구현하기가 더 쉽습니다. – BitEater

    관련 문제