Skip to content

Commit 0da124b

Browse files
committed
ConnectionContextExtensions
1 parent bfc9f51 commit 0da124b

File tree

3 files changed

+52
-50
lines changed

3 files changed

+52
-50
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ A very simple .net core library that can help to sync a large number of records
33

44
## Overview
55
This library provides extension methods so that you can use with your EntityFrameworkCore **DbContext** instance **DbContextExtensions.cs**
6-
or you can use **SqlConnectionExtensions.cs** to work directly with a **SqlConnection** instance without using EntityFrameworkCore.
6+
or you can use **ConnectionContextExtensions.cs** to work directly with a **SqlConnection** instance without using EntityFrameworkCore.
77

88
## Nuget
99
| Database | Package | GitHub |
@@ -99,7 +99,7 @@ await new BulkInsertBuilder<Row>(dbct.GetSqlConnection())
9999
.ExecuteAsync(rows);
100100
```
101101

102-
## SqlConnectionExtensions
102+
## ConnectionContextExtensions
103103
### Using Lambda Expression
104104
```c#
105105
using EntityFrameworkCore.SqlServer.SimpleBulks.BulkDelete;

src/EntityFrameworkCore.SqlServer.SimpleBulks/Extensions/ConnectionContextExtensions.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Microsoft.Data.SqlClient;
2+
using System.Collections.Generic;
23
using System.Data;
34
using System.Threading;
45
using System.Threading.Tasks;
@@ -53,4 +54,52 @@ public static SqlCommand CreateTextCommand(this ConnectionContext connection, st
5354
command.CommandTimeout = options.Timeout;
5455
return command;
5556
}
57+
58+
public static void SqlBulkCopy(this ConnectionContext connectionContext, DataTable dataTable, string tableName, IReadOnlyDictionary<string, string> columnNameMappings, BulkOptions options = null)
59+
{
60+
options ??= DefaultBulkOptions;
61+
62+
using var bulkCopy = new SqlBulkCopy(connectionContext.Connection, SqlBulkCopyOptions.Default, connectionContext.Transaction)
63+
{
64+
BatchSize = options.BatchSize,
65+
BulkCopyTimeout = options.Timeout,
66+
DestinationTableName = $"{tableName}"
67+
};
68+
69+
foreach (DataColumn dtColum in dataTable.Columns)
70+
{
71+
bulkCopy.ColumnMappings.Add(dtColum.ColumnName, GetDbColumnName(dtColum.ColumnName, columnNameMappings));
72+
}
73+
74+
bulkCopy.WriteToServer(dataTable);
75+
}
76+
77+
public static async Task SqlBulkCopyAsync(this ConnectionContext connectionContext, DataTable dataTable, string tableName, IReadOnlyDictionary<string, string> columnNameMappings, BulkOptions options = null, CancellationToken cancellationToken = default)
78+
{
79+
options ??= DefaultBulkOptions;
80+
81+
using var bulkCopy = new SqlBulkCopy(connectionContext.Connection, SqlBulkCopyOptions.Default, connectionContext.Transaction)
82+
{
83+
BatchSize = options.BatchSize,
84+
BulkCopyTimeout = options.Timeout,
85+
DestinationTableName = $"{tableName}"
86+
};
87+
88+
foreach (DataColumn dtColum in dataTable.Columns)
89+
{
90+
bulkCopy.ColumnMappings.Add(dtColum.ColumnName, GetDbColumnName(dtColum.ColumnName, columnNameMappings));
91+
}
92+
93+
await bulkCopy.WriteToServerAsync(dataTable, cancellationToken);
94+
}
95+
96+
private static string GetDbColumnName(string columnName, IReadOnlyDictionary<string, string> columnNameMappings)
97+
{
98+
if (columnNameMappings == null)
99+
{
100+
return columnName;
101+
}
102+
103+
return columnNameMappings.TryGetValue(columnName, out string value) ? value : columnName;
104+
}
56105
}

src/EntityFrameworkCore.SqlServer.SimpleBulks/Extensions/DataTableExtensions.cs

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
1-
using Microsoft.Data.SqlClient;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32
using System.Data;
43
using System.Text;
5-
using System.Threading;
6-
using System.Threading.Tasks;
74

85
namespace EntityFrameworkCore.SqlServer.SimpleBulks.Extensions;
96

107
public static class DataTableExtensions
118
{
12-
private static readonly BulkOptions DefaultBulkOptions = new BulkOptions()
13-
{
14-
BatchSize = 0,
15-
Timeout = 30,
16-
};
17-
189
public static string GenerateTableDefinition(this DataTable table, string tableName,
1910
IReadOnlyDictionary<string, string> columnNameMappings,
2011
IReadOnlyDictionary<string, string> columnTypeMappings)
@@ -36,44 +27,6 @@ public static string GenerateTableDefinition(this DataTable table, string tableN
3627
return sql.ToString();
3728
}
3829

39-
public static void SqlBulkCopy(this ConnectionContext connectionContext, DataTable dataTable, string tableName, IReadOnlyDictionary<string, string> columnNameMappings, BulkOptions options = null)
40-
{
41-
options ??= DefaultBulkOptions;
42-
43-
using var bulkCopy = new SqlBulkCopy(connectionContext.Connection, SqlBulkCopyOptions.Default, connectionContext.Transaction)
44-
{
45-
BatchSize = options.BatchSize,
46-
BulkCopyTimeout = options.Timeout,
47-
DestinationTableName = $"{tableName}"
48-
};
49-
50-
foreach (DataColumn dtColum in dataTable.Columns)
51-
{
52-
bulkCopy.ColumnMappings.Add(dtColum.ColumnName, GetDbColumnName(dtColum.ColumnName, columnNameMappings));
53-
}
54-
55-
bulkCopy.WriteToServer(dataTable);
56-
}
57-
58-
public static async Task SqlBulkCopyAsync(this ConnectionContext connectionContext, DataTable dataTable, string tableName, IReadOnlyDictionary<string, string> columnNameMappings, BulkOptions options = null, CancellationToken cancellationToken = default)
59-
{
60-
options ??= DefaultBulkOptions;
61-
62-
using var bulkCopy = new SqlBulkCopy(connectionContext.Connection, SqlBulkCopyOptions.Default, connectionContext.Transaction)
63-
{
64-
BatchSize = options.BatchSize,
65-
BulkCopyTimeout = options.Timeout,
66-
DestinationTableName = $"{tableName}"
67-
};
68-
69-
foreach (DataColumn dtColum in dataTable.Columns)
70-
{
71-
bulkCopy.ColumnMappings.Add(dtColum.ColumnName, GetDbColumnName(dtColum.ColumnName, columnNameMappings));
72-
}
73-
74-
await bulkCopy.WriteToServerAsync(dataTable, cancellationToken);
75-
}
76-
7730
private static string GetDbColumnName(string columnName, IReadOnlyDictionary<string, string> columnNameMappings)
7831
{
7932
if (columnNameMappings == null)

0 commit comments

Comments
 (0)