Com FastMember, você pode fazer isso sem precisar acessar
DataTable
(que, em meus testes, mais que dobra o desempenho):using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Observe que
ObjectReader
também pode trabalhar com fontes não genéricas, e não é necessário especificar os nomes dos membros antecipadamente (embora você provavelmente queira usar o ColumnMappings
aspecto de SqlBulkCopy
se você não especificá-los no ObjectReader
em si).