private static BulkInsertResult <T> BulkInsert <T>(IEnumerable <T> entities, BulkOptions options, TableMapping tableMapping, SqlConnection dbConnection, SqlTransaction transaction, string tableName, string[] inputColumns = null, SqlBulkCopyOptions bulkCopyOptions = SqlBulkCopyOptions.Default, bool useInteralId = false) { var dataReader = new EntityDataReader <T>(tableMapping, entities, useInteralId); var sqlBulkCopy = new SqlBulkCopy(dbConnection, bulkCopyOptions, transaction) { DestinationTableName = tableName, BatchSize = options.BatchSize }; foreach (var column in dataReader.TableMapping.Columns) { if (inputColumns == null || (inputColumns != null && inputColumns.Contains(column.Column.Name))) { sqlBulkCopy.ColumnMappings.Add(column.Property.Name, column.Column.Name); } } if (useInteralId) { sqlBulkCopy.ColumnMappings.Add(Constants.Guid_ColumnName, Constants.Guid_ColumnName); } sqlBulkCopy.WriteToServer(dataReader); return(new BulkInsertResult <T> { RowsAffected = Convert.ToInt32(sqlBulkCopy.GetPrivateFieldValue("_rowsCopied")), EntityMap = dataReader.EntityMap }); }