Ejemplo n.º 1
0
        private async Task BulkCopyAsync <TEntity>(
            IEnumerable <TEntity> items,
            string destinationTableName,
            IDictionary <string, string> columnMappings,
            bool useTableLock,
            CancellationToken cancellationToken)
            where TEntity : class
        {
            var options = SqlBulkCopyOptions.KeepNulls;

            if (useTableLock)
            {
                options &= SqlBulkCopyOptions.TableLock;
            }

            using (var sqlBulkCopy = new SqlBulkCopy(connection, options, externalTransaction: null))
            {
                sqlBulkCopy.BulkCopyTimeout      = 0;
                sqlBulkCopy.DestinationTableName = destinationTableName;

                foreach (var columnMapping in columnMappings)
                {
                    sqlBulkCopy.ColumnMappings.Add(columnMapping.Key, columnMapping.Value);
                }

                using (var reader = new TypedDataReader <TEntity>(columnMappings, items))
                {
                    await sqlBulkCopy.WriteToServerAsync(reader, cancellationToken).ConfigureAwait(false);
                }
            }
        }