public void InsertItems <T>(IEnumerable <T> items, string schema, string tableName, IList <ColumnMapping> properties, DbConnection storeConnection, int?batchSize, SqlBulkCopyOptions copyOptions = SqlBulkCopyOptions.Default, SqlTransaction transaction = null)
        {
            using (var reader = new EFDataReader <T>(items, properties))
            {
                var con = storeConnection as SqlConnection;
                if (con.State != System.Data.ConnectionState.Open)
                {
                    con.Open();
                }
                using (var copy = transaction == null
                    ? new SqlBulkCopy(con.ConnectionString, copyOptions)
                    : new SqlBulkCopy(con, copyOptions, transaction))
                {
                    copy.BatchSize = Math.Min(reader.RecordsAffected, batchSize ?? 15000); //default batch size
                    if (!string.IsNullOrWhiteSpace(schema))
                    {
                        copy.DestinationTableName = string.Format("[{0}].[{1}]", schema, tableName);
                    }
                    else
                    {
                        copy.DestinationTableName = "[" + tableName + "]";
                    }

                    copy.NotifyAfter = 0;

                    foreach (var i in Enumerable.Range(0, reader.FieldCount))
                    {
                        copy.ColumnMappings.Add(i, properties[i].NameInDatabase);
                    }
                    copy.WriteToServer(reader);
                    copy.Close();
                }
            }
        }
Ejemplo n.º 2
0
        public void InsertItems <T>(IEnumerable <T> items, string schema, string tableName, IList <ColumnMapping> properties, DbConnection storeConnection, int?batchSize, int?executeTimeout, SqlBulkCopyOptions copyOptions, DbTransaction transaction)
        {
            using (var reader = new EFDataReader <T>(items, properties))
            {
                if (storeConnection.State != System.Data.ConnectionState.Open)
                {
                    storeConnection.Open();
                }

                using (var copy = new SqlBulkCopy((SqlConnection)storeConnection, copyOptions, transaction as SqlTransaction))
                {
                    copy.BulkCopyTimeout = executeTimeout ?? 600;
                    copy.BatchSize       = batchSize ?? 15000;               //default batch size

                    if (!string.IsNullOrWhiteSpace(schema))
                    {
                        copy.DestinationTableName = $"[{schema}].[{tableName}]";
                    }
                    else
                    {
                        copy.DestinationTableName = "[" + tableName + "]";
                    }

                    copy.NotifyAfter = 0;

                    foreach (var i in Enumerable.Range(0, reader.FieldCount))
                    {
                        copy.ColumnMappings.Add(i, properties[i].NameInDatabase);
                    }

                    copy.WriteToServer(reader);
                    copy.Close();
                }
            }
        }