Con FastMember, puoi farlo senza mai dover passare da DataTable
(che, nei miei test, raddoppia le prestazioni):
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Nota che ObjectReader
può funzionare anche con sorgenti non generiche e non è necessario specificare i nomi dei membri in anticipo (sebbene tu voglia probabilmente usare ColumnMappings
aspetto di SqlBulkCopy
se non li specifichi in ObjectReader
stesso).