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 }); }
internal static int ExecuteSql(string query, SqlConnection connection, SqlTransaction transaction, BulkOptions options) { var sqlCommand = new SqlCommand(query, connection, transaction); if (options?.CommandTimeout.HasValue ?? false) { sqlCommand.CommandTimeout = options.CommandTimeout.Value; } return(sqlCommand.ExecuteNonQuery()); }
private static BulkQueryResult BulkQuery(this DbContext context, string sqlText, SqlConnection dbConnection, SqlTransaction transaction, BulkOptions options) { var results = new List <object[]>(); var columns = new List <string>(); var command = new SqlCommand(sqlText, dbConnection, transaction); if (options.CommandTimeout.HasValue) { command.CommandTimeout = options.CommandTimeout.Value; } var reader = command.ExecuteReader(); //Get column names for (int i = 0; i < reader.FieldCount; i++) { columns.Add(reader.GetName(i)); } //Read data while (reader.Read()) { Object[] values = new Object[reader.FieldCount]; reader.GetValues(values); results.Add(values); } return(new BulkQueryResult { Columns = columns, Results = results, RowsAffected = reader.RecordsAffected }); }