From 92885e7b11b2094bb5d645a8c104f8e897c8ac1c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 17 Dec 2021 19:09:53 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20BulkCopy=20=E4=B8=8E?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E4=BA=8B=E5=8A=A1=E6=9C=AA=E4=BC=A0=E6=92=AD?= =?UTF-8?q?=E7=9A=84=20bug=EF=BC=9B#962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DamengExtensions.cs | 18 ++++++---- .../FreeSqlMySqlConnectorGlobalExtensions.cs | 18 +++++----- .../OracleExtensions.cs | 18 ++++++---- .../SqlServerExtensions.cs | 36 +++++++++++-------- 4 files changed, 54 insertions(+), 36 deletions(-) diff --git a/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs b/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs index 7774195f..24931172 100644 --- a/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs +++ b/Providers/FreeSql.Provider.Dameng/DamengExtensions.cs @@ -48,15 +48,19 @@ public static partial class FreeSqlDamengGlobalExtensions { if (insert.InternalConnection == null && insert.InternalTransaction == null) { - using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) - { - using (var bulkCopy = copyOptions == DmBulkCopyOptions.Default ? - new DmBulkCopy(conn.Value as DmConnection) : - new DmBulkCopy(conn.Value as DmConnection, copyOptions, insert.InternalTransaction as DmTransaction)) - { + if (insert._orm.Ado?.TransactionCurrentThread != null) + using (var bulkCopy = new DmBulkCopy(insert._orm.Ado.TransactionCurrentThread.Connection as DmConnection, copyOptions, insert._orm.Ado.TransactionCurrentThread as DmTransaction)) writeToServer(bulkCopy); + else + using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) + { + using (var bulkCopy = copyOptions == DmBulkCopyOptions.Default ? + new DmBulkCopy(conn.Value as DmConnection) : + new DmBulkCopy(conn.Value as DmConnection, copyOptions, insert.InternalTransaction as DmTransaction)) + { + writeToServer(bulkCopy); + } } - } } else if (insert.InternalTransaction != null) { diff --git a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs index 3a43ed35..2c4f3bd7 100644 --- a/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs +++ b/Providers/FreeSql.Provider.MySqlConnector/FreeSqlMySqlConnectorGlobalExtensions.cs @@ -50,10 +50,11 @@ public static class FreeSqlMySqlConnectorGlobalExtensions { if (insert.InternalConnection == null && insert.InternalTransaction == null) { - using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) - { - writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection)); - } + if (insert._orm.Ado?.TransactionCurrentThread != null) + writeToServer(new MySqlBulkCopy(insert._orm.Ado.TransactionCurrentThread.Connection as MySqlConnection, insert._orm.Ado?.TransactionCurrentThread as MySqlTransaction)); + else + using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) + writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection)); } else if (insert.InternalTransaction != null) { @@ -109,10 +110,11 @@ public static class FreeSqlMySqlConnectorGlobalExtensions { if (insert.InternalConnection == null && insert.InternalTransaction == null) { - using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) - { - await writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection)); - } + if (insert._orm.Ado?.TransactionCurrentThread != null) + await writeToServer(new MySqlBulkCopy(insert._orm.Ado.TransactionCurrentThread.Connection as MySqlConnection, insert._orm.Ado?.TransactionCurrentThread as MySqlTransaction)); + else + using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) + await writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection)); } else if (insert.InternalTransaction != null) { diff --git a/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs b/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs index dff0b1c9..2a216ce4 100644 --- a/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs +++ b/Providers/FreeSql.Provider.Oracle/OracleExtensions.cs @@ -48,15 +48,19 @@ public static partial class FreeSqlOracleGlobalExtensions { if (insert.InternalConnection == null && insert.InternalTransaction == null) { - using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) - { - using (var bulkCopy = copyOptions == OracleBulkCopyOptions.Default ? - new OracleBulkCopy(conn.Value as OracleConnection) : - new OracleBulkCopy(conn.Value as OracleConnection, copyOptions)) - { + if (insert._orm.Ado?.TransactionCurrentThread != null) + using (var bulkCopy = new OracleBulkCopy(insert._orm.Ado.TransactionCurrentThread.Connection as OracleConnection, copyOptions)) writeToServer(bulkCopy); + else + using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) + { + using (var bulkCopy = copyOptions == OracleBulkCopyOptions.Default ? + new OracleBulkCopy(conn.Value as OracleConnection) : + new OracleBulkCopy(conn.Value as OracleConnection, copyOptions)) + { + writeToServer(bulkCopy); + } } - } } else if (insert.InternalTransaction != null) { diff --git a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs index b96e4b42..afca4c55 100644 --- a/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs +++ b/Providers/FreeSql.Provider.SqlServer/SqlServerExtensions.cs @@ -92,15 +92,19 @@ public static partial class FreeSqlSqlServerGlobalExtensions { if (insert.InternalConnection == null && insert.InternalTransaction == null) { - using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) - { - using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ? - new SqlBulkCopy(conn.Value as SqlConnection) : - new SqlBulkCopy(conn.Value as SqlConnection, copyOptions, null)) - { + if (insert._orm.Ado?.TransactionCurrentThread != null) + using (var bulkCopy = new SqlBulkCopy(insert._orm.Ado.TransactionCurrentThread.Connection as SqlConnection, copyOptions, insert._orm.Ado.TransactionCurrentThread as SqlTransaction)) writeToServer(bulkCopy); + else + using (var conn = insert.InternalOrm.Ado.MasterPool.Get()) + { + using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ? + new SqlBulkCopy(conn.Value as SqlConnection) : + new SqlBulkCopy(conn.Value as SqlConnection, copyOptions, null)) + { + writeToServer(bulkCopy); + } } - } } else if (insert.InternalTransaction != null) { @@ -167,15 +171,19 @@ public static partial class FreeSqlSqlServerGlobalExtensions { if (insert.InternalConnection == null && insert.InternalTransaction == null) { - using (var conn = await insert.InternalOrm.Ado.MasterPool.GetAsync()) - { - using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ? - new SqlBulkCopy(conn.Value as SqlConnection) : - new SqlBulkCopy(conn.Value as SqlConnection, copyOptions, null)) - { + if (insert._orm.Ado?.TransactionCurrentThread != null) + using (var bulkCopy = new SqlBulkCopy(insert._orm.Ado.TransactionCurrentThread.Connection as SqlConnection, copyOptions, insert._orm.Ado.TransactionCurrentThread as SqlTransaction)) await writeToServerAsync(bulkCopy); + else + using (var conn = await insert.InternalOrm.Ado.MasterPool.GetAsync()) + { + using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ? + new SqlBulkCopy(conn.Value as SqlConnection) : + new SqlBulkCopy(conn.Value as SqlConnection, copyOptions, null)) + { + await writeToServerAsync(bulkCopy); + } } - } } else if (insert.InternalTransaction != null) {