Either use Batching
Or use System.Data.SqlClient.SqlBulkCopy
Example:
List<IEntityPropertyProjector> entityCollectionProjection = EntityFields2.ConvertToProjectors(collectionToSave[0].Fields);
var result = new DataTable();
collectionToSave.DefaultView.CreateProjection(entityCollectionProjection, result);
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(new DataAccessAdapter().ConnectionString))
{
bulkCopy.BulkCopyTimeout = 240;
bulkCopy.DestinationTableName = "dbo.Products";
try
{
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("ProductCode", "ProductCode"));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Actual", "Actual"));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Target", "Target"));
bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping("Date", "Date"));
bulkCopy.WriteToServer(result);
}