В нашем проекте мы используем Linq2SQL, но теперь мы должны иметь возможность быстро вставить почти 15k строк в таблице базы данных, поэтому я написал метод расширения:как настроить автоматическое отображение в SqlBulkCopy
public static void BulkInsertBigData(Table<Maintenance> maintenance, IEnumerable<Maintenance> maintenancesToInsert)
{
using (var copy = new SqlBulkCopy(maintenance.Context.Connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.KeepNulls))
{
//copy.ColumnMappings.Add("Id", "Id");
//copy.ColumnMappings.Add("FacilityId", "FacilityId");
//copy.ColumnMappings.Add("ParentFacilityId", "ParentFacilityId");
//copy.ColumnMappings.Add("StartTime", "StartTime");
//copy.ColumnMappings.Add("EndTime", "EndTime");
//copy.ColumnMappings.Add("ExpirationTime", "ExpirationTime");
//copy.ColumnMappings.Add("DispatcherUserName", "DispatcherUserName");
copy.DestinationTableName = "dbo.Maintenance";
var data = maintenancesToInsert.ToDataTable();
copy.WriteToServer(data);
}
}
Maintanance - это автоматически созданный класс Linq2SQL. Этот код отлично работает, когда я раскомментирую строки ColumnMappings, но они не подходят, потому что если кто-то изменит dbml, этот код не будет работать (этот код не является гибким :)). ToDataTable()
- метод на основе отражения, который преобразует список обслуживания в DataTable.
Я буду благодарен за любую помощь
Гравия, большое спасибо! Я использовал ваше первое решение, и оно отлично поработало для меня. –