Example #1
0
        public static async Task BulkInsert <T>(this IContextAdapter contextAdapter, IEnumerable <T> entities,
                                                bool keepIdentity = false)
        {
            var sqlTransaction = contextAdapter.GeTransaction();

            using var sqlBulkCopy = new SqlBulkCopy(sqlTransaction.Connection,
                                                    keepIdentity ? SqlBulkCopyOptions.KeepIdentity : SqlBulkCopyOptions.Default, sqlTransaction)
                  {
                      BulkCopyTimeout      = BulkCopyTimeout,
                      DestinationTableName = contextAdapter.GetTableName <T>()
                  };
            var table = contextAdapter.GetDataTable(entities);

            foreach (var column in table.Columns.OfType <DataColumn>().Select(o => o.ColumnName))
            {
                sqlBulkCopy.ColumnMappings.Add(column, column);
            }

            await sqlBulkCopy.WriteToServerAsync(table);
        }