2017-02-20 10 views
5

대량 삽입/업데이트/삭제 작업시 Entity Framework의 속도가 매우 느릴 수 있습니다. AutoDetectChanges 및/또는 ValidateOnSaveEnabled를 해제하기 위해 자주 제안되는 비틀기조차 항상 도움이되는 것은 아닙니다.Z.EntityFramework.Extensions의 비상업적 인 대안이 있습니까?

나는 NuGet의 Z.EntityFramework.Extensions를 보았지만 일정 기간 동안 만 작동하는 상용 제품인 것으로 보입니다.

https://www.nuget.org/packages/Z.EntityFramework.Extensions/

지금까지, 정말에만 BulkInsert(), BulkUpdate()와 BulkDelete()가 필요합니다.

내 질문은 : Z.EntityFramework.Extensions로 거의 동일한 작업을 수행 신뢰할 수있는 모든 비상업적 라이브러리는

있습니까?

어떤 힌트를 주셔서 감사합니다!

+0

배치 업데이트 및 사용할 수있는 HTTPS 삭제 : // GitHub의를 .com/loresoft/EntityFramework.Extended. 일괄 삽입의 경우 - 100 개의 엔티티마다 새로운 컨텍스트를 만듭니다. 따라서 컨텍스트를 만들고 100 개를 삽입하고 변경 사항을 저장하십시오. 그런 다음 새 트랜잭션을 생성하고 다음 100 개를 삽입하고 변경 사항을 저장합니다. 삽입 배치는 아니지만 동일한 컨텍스트 인스턴스에 모든 항목을 삽입하는 것보다 훨씬 빠릅니다. – Evk

+0

일반적으로 ORM은 배치 작업에 적합하지 않으며 대량 삽입이 훨씬 적습니다. 그것은 자갈을 트럭으로 운반하기 위해 핀셋을 사용하는 것과 같습니다. 이 부분을 확장 물로 은폐 할 수는 없습니다. 대량 삽입을위한 가장 좋은 옵션은 SqlBulkCopy를 사용하여 최소 * 기록 * 스트리밍 대량 삽입 작업을 수행하는 것입니다. 대량 업데이트를 수행하려면 적절한 UPDATE 문을 사용하십시오.외부 소스에서 * UPSERT *를 원하면 모든 것을 스테이징 테이블로 임포트하고 MERGE를 사용하여 목표 테이블을 업데이트하십시오. –

+0

즉, 불안정하고 안전하지 않고 확장 불가능한 프로세스를 신뢰할 수있는 프로세스로 변환 할 수있는 무언가를 찾고 있습니다. 하나. 왜 처음부터 안정적이고 확장 가능한 프로세스를 사용하지 않습니까? –

답변

2

면책 조항 : 나는 자네 말이 맞아 Entity Framework Extensions

의 소유자입니다. 이것은 상용 제품입니다.

매월 무료 평가판을 사용할 수 있지만 프로덕션 환경에서는 제품을 구입해야합니다.

대량

이 BulkInsert를 들어, 일부 무료 대안이 있습니다 삽입하지만 조심, 그들은 모두 상속을 & 연결을 지원하지 않으며 더 이상 지원되지 않습니다

(210)

면책 조항 : 나는 & & 일괄 삭제 일괄 업데이트 Entity Framework Plus

의 소유자 해요, 당신은이 라이브러리를 사용할 수 있습니다

// DELETE all users which has been inactive for 2 years 
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) 
     .Delete(); 

// UPDATE all users which has been inactive for 2 years 
ctx.Users.Where(x => x.LastLoginDate < DateTime.Now.AddYears(-2)) 
     .Update(x => new User() { IsSoftDeleted = 1 }); 
+0

감사합니다. 조나단. 나는 이것을 유효한 답으로 표시 할 것입니다, 왜냐하면 나는 그러한 제품의 소유자로서 다른 경쟁자에 대한 좋은 개요를 가지고 있다고 생각하기 때문입니다. EF Plus에는 삽입물이 없다는 것이 정말 슬픈 일이지만, 상용 제품과는 약간의 차이점이 있다고 생각합니다. – Michael

+1

불행히도 우리는 오픈 소스 기능을 일부 제공하려고했지만이 비즈니스 모델은 제대로 작동하지 않습니다. 그래서 예, 우리는 두 라이브러리를 구분해야합니다. 오픈 소스/무료 프로젝트 대부분의 시간은 더 많은 사용자가 사용함에 따라 비용/시간/복잡성이 지속적으로 증가하기 때문에 시간이 지나면 지원되지 않습니다. 예를 들어 작년에이 무료 라이브러리는 다른 라이브러리보다 더 많은 시간을 지원했습니다. –

+0

안녕하세요, 마이클, 연구하는 동안 SqlBulkTools를 발견했는지 궁금하십니까? –