public static async Task InsertAsync(CancellationToken cancellationToken = default(CancellationToken), SqlTransaction transaction = null) { using (var connection = new SqlConnection()) { connection.Configure(); await connection.OpenAsync(cancellationToken).ConfigureAwait(true); const int recordsToGenerate = 100_000; ConsoleLog.Write($"Gerando {recordsToGenerate:n0} registros clientes"); var customers = Customer.Generate(recordsToGenerate); ConsoleLog.Write("Inserindo registros no banco de dados"); using (var insertBulk = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction)) { using (var customerReader = new ObjectDataReader <Customer>(customers.GetEnumerator())) { insertBulk.Configure("Customer"); await insertBulk.WriteToServerAsync(customerReader, cancellationToken).ConfigureAwait(false); } } using (var command = new SqlCommand("", connection)) { try { ConsoleLog.Write("Criando tabela temporária e copiando registros"); command.CommandText = BulkUpdate.CreateTempTable; command.ExecuteNonQuery(); try { ConsoleLog.Write("Atualizando registros: Tabela temporária -> Customers"); command.CommandTimeout = 300; command.CommandText = BulkUpdate.UpdateTable; command.ExecuteNonQuery(); } finally { ConsoleLog.Write("Excluindo tabela temporária"); command.CommandText = BulkUpdate.DropTempTable; command.ExecuteNonQuery(); } } catch (Exception e) { ConsoleLog.Write(e.Message); } } } }