使用Dapper .Net使用范围标识在多个关系表中批量插入

时间:2015-04-30 20:01:30

标签: sql sql-server c#-4.0 dapper

我需要在多个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批量插入数百万条记录的集合

1 个答案:

答案 0 :(得分:3)

Dapper只包装原始ADO.NET;原始的ADO.NET没有为此提供便利,因此小巧玲珑没有。你想要的是SqlBulkCopy。您也可以 使用表值参数,但这实际上就像SqlBulkCopy作业。

在紧要关头,你可以在这里使用 dapper - ExecuteIEnumerable<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);
}