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) {