Med FastMember kan du göra detta utan att behöva gå via DataTable
(vilket i mina tester mer än fördubblar prestandan):
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Observera att ObjectReader
kan också fungera med icke-generiska källor, och det är inte nödvändigt att ange medlemsnamnen i förväg (även om du förmodligen vill använda ColumnMappings
aspekt av SqlBulkCopy
om du inte anger dem i ObjectReader
själv).