我需要在多个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批量插入数百万条记录的集合
答案 0 :(得分:3)
Dapper只包装原始ADO.NET;原始的ADO.NET没有为此提供便利,因此小巧玲珑没有。你想要的是SqlBulkCopy
。您也可以 使用表值参数,但这实际上就像SqlBulkCopy
作业。
在紧要关头,你可以在这里使用 dapper - 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);
}