어떻게 오퍼 orm으로 배치 작업을 수행합니까?

batch-file bulk dapper orm

문제

나는 프로젝트에서 멍청한 멍청이가 있고 데이터 (1200000row)의 데이터를 알버트로 저장했지만, 대퍼와의 트랜잭션이 매우 느리다. fast.with nhibernate (세션 무계 주)가 느리다. 나는 dapper가 빠르다 고 생각한다. 왜냐하면 9 초에 dapper로 33 초에 nhibernate를 가진 데이터 (700000)를 가져 오기 때문이다.

어떻게 해결 된 문제?

내 코드는 다음과 같습니다.

IDbTransaction trans = connection.BeginTransaction();
connection.Execute(@"
    insert DailyResult(Id, PersonId,DateTaradod,DailyTaradods)
    values(@Id, @PersonId,@DateTaradod,@DailyTaradods)", entity, trans);                                    
trans.Commit();

전문가 답변

정규 ADO.NET API를 통해, 트랜잭션 순식간에 1,200,000 행을 삽입 할 수 있도록하는 메커니즘은 없습니다. 단순히 그 API의 의도가 아닙니다 .

원하는대로 SqlBulkCopy 를 사용해야하는 것처럼 들립니다. 이것은 트랜잭션을 지원하며 FastMember 를 사용하여 여기에서 도움을받을 수 있습니다. 예 :

IEnumerable<YourEntity> source = ...
using(var bcp = new SqlBulkCopy(
    connection, SqlBulkCopyOptions.UseInternalTransaction))
using(var reader = ObjectReader.Create(source,
         "Id", "PersonId", "DateTaradod", "DailyTaradods"))
{
    bcp.DestinationTableName = "DailyResult";
    bcp.WriteToServer(reader);
}

또한 외부 트랜잭션을 지원하지만 "tran, push, tran을 생성하려면"내부 트랜잭션을 사용할 수도 있습니다.

SqlBulkCopy 를 사용하지 않으려는 경우 테이블 반환 매개 변수 접근 방식을 사용할 수도 있지만이 볼륨을 처리 할 때 SqlBulkCopy권장 API입니다.

참고 : 테이블에 Id , PersonId , DateTaradodDailyTaradods 보다 많은 열이있는 경우 명시적인 bcp.ColumnMappings 을 지정하여 삽입 동작 방식을 조정할 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.