Dapper .Net-using scope identity를 사용하여 여러 관계형 테이블에 대량 삽입

c#-4.0 dapper sql sql-server

문제

다중 SQL Server 관계형 테이블에서 수백만 개의 레코드를 가져와야합니다.

TableA(Aid(pk),Name,Color)----return id using scope identity 
TableB(Bid,Aid(fk),Name)---Here we need to insert Aid(pk) which we got using scocpe Identity

단일 Insert 문에서 dapper를 사용하여 수백만 레코드 컬렉션 대량 삽입을 수행하는 방법

수락 된 답변

Dapper는 원시 ADO.NET을 래핑합니다. 원시 ADO.NET은이 기능을 제공하지 않으므로 더 이상하지 않습니다. 원하는 것은 SqlBulkCopy 입니다. 또한 테이블 반환 매개 변수를 사용할 수도 있지만 실제로 SqlBulkCopy 작업처럼 느껴집니다.

- 핀치에, 당신은 날씬한 여기에 사용할 수있는 Execute 풀다 것 IEnumerable<T> 에 대한 일련의 명령에 T -하지만 명령이 많이 될 것입니다; 비동기 파이프 라이닝을 명시 적으로 활성화하지 않으면 명령 당 지연 시간이 발생합니다 (파이프 라인 모드에서는이를 피할 수 있지만 명령은 여전히 ​​n 개입니다). 그러나 SqlBulkCopy훨씬 더 효율적입니다.

입력 데이터가 IEnumerable<T> 경우 FastMember의 ObjectReader 를 사용할 수 있습니다. 예 :

IEnumerable<SomeType> data = ...
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
    bcp.DestinationTableName = "SomeTable";
    bcp.WriteToServer(reader);
}


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