2014-12-02 2 views
1

프로세스 중에 많은 양의 엔티티 (~ 5000)를 삽입/업데이트하는데 엄청난 시간이 걸립니다 (5 분 트랜잭션에서 시간 초과 됨).EntityManager에서 사용되는 DBContext에 액세스하는 방법은 무엇입니까?

기본적으로 DBContext.AutoDetectChangesEnabled가 ON으로 설정되어 있고 이런 종류의 동작 (http://www.exsertus.be/2014/10/ef-bulk-performance/)이 발생합니다.

제 생각에 Devforce "kind of"는 각 EntityManager 내에서 DBContext를 캡슐화합니다. Devforce는 내가 수행 한 광산을 정의하지 않는 한 자체 구현을 사용합니다. 이 속성 AutoDetectChangesEnabled를 사용하여 "재생"할 수 있도록 어떻게 액세스 할 수 있는지 알고 싶습니다.

DevForce로 대량의 엔티티를 삽입/업데이트/삭제하는 다른 해결책이 있습니까?

감사

답변

0

은 당신이 당신의 자신의 DbContext를 정의한 이후 당신은 내가이 변경 도움이 될 것입니다 얼마나 확실하지 않다, 그러나 Configuration.AutoDetectChangesEnabled = false;

으로 DbContext의 생성자에서 설정이 속성을 변경할 수 있습니다. 애플리케이션이 n- 티어이고 와이어를 통해 ~ 5000 개의 엔티티를 저장하려는 경우이 작업은 항상 느려지 며 통신 시간 초과가 발생합니다. 일반적으로 대량 작업을 수행해야하는 경우 DevForce가 최적의 방법이 아닙니다.

+0

안녕하세요. 모든 애플리케이션/모델을 고려할 때 devforce를 기반으로하는 최선의 접근 방법은 무엇입니까? 또한 SavesChanges()를 호출 할 때 SQL 서버에 전송되는 첫 번째 SQL 순서를 확인하는 데 1 분 이상을 기다릴 수 있는데 SQL을 생성하는 데 너무 오래 걸리는 이유는 무엇입니까? Devforce 또는 EF를 생성하는 실마리가 없습니다. – kdev

+0

EF는 SQL을 생성하지만 SQL 생성보다 느리게 진행될 수 있습니다. 비록 내가 그들과 함께 어떤 경험도 없지만 대량 작업이 주요 응용 프로그램의 일부가 아니라면 EF 유틸리티를 사용할 것입니다.이 아이디어를 IdeaBlade의 누군가가 더 살펴보고 싶으면 웹 지원 양식을 통해 기술 지원 케이스를여십시오. –

1

나는이 EF 도구 "https://www.nuget.org/packages/EFUtilities"일한 그것은 개체 당 정상 삽입하는 대신 대량 복사를 사용하기 때문에 나는 큰 인서트 큰 성능 향상을 얻었다.

Github here의 설명서를 확인할 수 있습니다.

17,000 개의 엔티티 삽입 트랜잭션과 함께 사용했으며 몇 초 만에 완료되었습니다. EF와 더 잘 이해하고 비교하려면이 항목을 선택하십시오. http://blog.credera.com/technology-insights/microsoft-solutions/entity-framework-batch-operations-using-ef-utilities/

기관의 목록을 삽입하는 유틸리티를 사용하는 샘플은 다음과 같이이다 :

using (var db = new YourDbContext()) 
{ 
    EFBatchOperation.For(db, db.BlogPosts).InsertAll(list); 
} 

희망이 도움이됩니다.

+0

불행히도 기본 키 픽스 업이 필요하므로이 키를 사용할 수 없습니다. – kdev

+0

ID를 생성한다는 의미입니까? 이 경우 도구가 엔티티에서 작동하지만 컨텍스트에 첨부하고 하나씩 저장하지 않기 때문에이 도구가 모든 것을 한 번에 푸시합니다. 라이브러리 확실히 시도 가치. –

+0

@kdev 실제로 두 테이블에 삽입하고 부모 행에 자식 행을 가리켜 야한다는 것을 의미할까요? 부모에게 데이터베이스 생성 ID를 사용하는 경우 이는 매우 어려운 문제입니다. (나는 항상 guid 또는 이와 유사한 상황으로 전환). –