private void WriteToDestination(List <Fact> facts, SqlBulkCopy sqlBulkCopy, StreamWriter outputFile) { ReportStatus("Writing data..."); if (outputFile != null) { StringBuilder sb = new StringBuilder(); var factsReader = EntityDataReaderExtensions.AsDataReader <Fact>(facts); while (factsReader.Read()) { for (int i = 0; i < factsReader.FieldCount; i++) { if (i > 0) { sb.Append('\t'); } sb.Append(factsReader[i].ToString()); } sb.Append(Environment.NewLine); } outputFile.Write(sb); } if (sqlBulkCopy != null) { sqlBulkCopy.WriteToServer(EntityDataReaderExtensions.AsDataReader <Fact>(facts)); } }
private void BulkLoadEntities(EntityPump pump, string connectionString, dynamic entities) { Console.WriteLine($"[{DateTime.Now:o}] Preparing rows for commit ..."); Stopwatch sw = Stopwatch.StartNew(); using (var transactionScope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { using (var sqlBulkCopy = new SqlBulkCopy(connectionString)) { sqlBulkCopy.DestinationTableName = pump.TableName; sqlBulkCopy.BatchSize = 10000; sqlBulkCopy.WriteToServer(EntityDataReaderExtensions.AsDataReader(entities)); transactionScope.Complete(); } } sw.Stop(); Console.WriteLine($"[{DateTime.Now:o}] -> committed {entities.Count:N0} rows in {sw.Elapsed}."); }