dapper.net을 사용하여 일괄 삽입을 수행하는 가장 좋은 방법

.net bulkinsert c# dapper sql-server

문제

다음 코드를 사용하여 SQL Server 2014의 테이블에 레코드를 삽입합니다.

using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["myConnString"]))
{

   conn.Execute("INSERT statement here", insertList);

}

insertList 는 1 백만 항목이 들어있는 목록입니다. 필자는 i5 데스크톱에서이 삽입물을 테스트했으며 동일한 컴퓨터에서 SQL Server에 백만 개의 레코드를 삽입하는 데 약 65 분이 걸렸습니다. 나는 어째서 더러운 장면에서 삽입 작업을하고 있는지 잘 모르겠습니다. 나는 분명히 백만 번 데이터베이스 연결을 열고 닫고 싶지 않습니다!

이 방법은 dapper에서 대량 삽입을 수행하는 가장 좋은 방법입니까 아니면 다른 것을 시도하거나 엔터프라이즈 라이브러리를 사용하여 일반 ADO.Net을 사용해야합니까?

편집하다

뒤늦은 지쳐서, 나는 ADO.Net을 사용하는 것이 더 낫다는 것을 알고 있으므로 내 질문을 다시 말해 줄 것이다. 나는 여전히 이것이 dapper가 할 수있는 최선인지 아니면 dapper 자체에서 더 나은 방법을 놓치고 있는지 알고 싶습니다.

전문가 답변

우수한 성능으로 삽입하는 가장 좋은 방법은 Alex와 Andreas가 제안한대로 SqlBulkCopy 클래스를 직접 사용하는 것입니다.

면책 조항 : 저는 Dapper Plus 프로젝트의 소유자입니다.

이 프로젝트는 다음 작업을 쉽게 지원합니다.

  • 대량 삽입
  • 대량 업데이트
  • 벌크 삭제
  • 벌크 머지

매핑을 사용하고 ID 열과 같은 값을 출력하도록 허용합니다.

// CONFIGURE & MAP entity
DapperPlusManager.Entity<Order>()
                 .Table("Orders")
                 .Identity(x => x.ID);

// CHAIN & SAVE entity
connection.BulkInsert(orders)
          .AlsoInsert(order => order.Items);
          .Include(x => x.ThenMerge(order => order.Invoice)
                         .AlsoMerge(invoice => invoice.Items))
          .AlsoMerge(x => x.ShippingAddress);   

인기 답변

성능이 당신이 그때라면 Dapper를 사용하여 삽입하는 대신 SqlBulkCopy를 사용하는 것이 좋습니다. 몇 가지 성능 비교는 다음을 참조하십시오 . http://www.ikriv.com/dev/db/SqlInsert/SqlInsert.html



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow