Mit FastMember können Sie dies tun, ohne jemals über DataTable
gehen zu müssen (was in meinen Tests die Leistung mehr als verdoppelt):
using(var bcp = new SqlBulkCopy(connection))
using(var reader = ObjectReader.Create(data, "Id", "Name", "Description"))
{
bcp.DestinationTableName = "SomeTable";
bcp.WriteToServer(reader);
}
Beachten Sie, dass ObjectReader
kann auch mit nicht generischen Quellen arbeiten, und es ist nicht notwendig, die Mitgliedsnamen im Voraus anzugeben (obwohl Sie wahrscheinlich die ColumnMappings
verwenden möchten Aspekt von SqlBulkCopy
wenn Sie sie nicht im ObjectReader
angeben selbst).