- 修复 BulkCopy 与线程事务未传播的 bug;#962

This commit is contained in:
2881099 2021-12-17 19:09:53 +08:00
parent 9bd6e83ed7
commit 92885e7b11
4 changed files with 54 additions and 36 deletions

View File

@ -48,6 +48,10 @@ public static partial class FreeSqlDamengGlobalExtensions
{ {
if (insert.InternalConnection == null && insert.InternalTransaction == null) if (insert.InternalConnection == null && insert.InternalTransaction == null)
{ {
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 conn = insert.InternalOrm.Ado.MasterPool.Get())
{ {
using (var bulkCopy = copyOptions == DmBulkCopyOptions.Default ? using (var bulkCopy = copyOptions == DmBulkCopyOptions.Default ?

View File

@ -50,11 +50,12 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
{ {
if (insert.InternalConnection == null && insert.InternalTransaction == null) if (insert.InternalConnection == null && insert.InternalTransaction == null)
{ {
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()) using (var conn = insert.InternalOrm.Ado.MasterPool.Get())
{
writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection)); writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection));
} }
}
else if (insert.InternalTransaction != null) else if (insert.InternalTransaction != null)
{ {
writeToServer(new MySqlBulkCopy(insert.InternalTransaction.Connection as MySqlConnection, insert.InternalTransaction as MySqlTransaction)); writeToServer(new MySqlBulkCopy(insert.InternalTransaction.Connection as MySqlConnection, insert.InternalTransaction as MySqlTransaction));
@ -109,11 +110,12 @@ public static class FreeSqlMySqlConnectorGlobalExtensions
{ {
if (insert.InternalConnection == null && insert.InternalTransaction == null) if (insert.InternalConnection == null && insert.InternalTransaction == null)
{ {
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()) using (var conn = insert.InternalOrm.Ado.MasterPool.Get())
{
await writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection)); await writeToServer(new MySqlBulkCopy(conn.Value as MySqlConnection));
} }
}
else if (insert.InternalTransaction != null) else if (insert.InternalTransaction != null)
{ {
await writeToServer(new MySqlBulkCopy(insert.InternalTransaction.Connection as MySqlConnection, insert.InternalTransaction as MySqlTransaction)); await writeToServer(new MySqlBulkCopy(insert.InternalTransaction.Connection as MySqlConnection, insert.InternalTransaction as MySqlTransaction));

View File

@ -48,6 +48,10 @@ public static partial class FreeSqlOracleGlobalExtensions
{ {
if (insert.InternalConnection == null && insert.InternalTransaction == null) if (insert.InternalConnection == null && insert.InternalTransaction == null)
{ {
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 conn = insert.InternalOrm.Ado.MasterPool.Get())
{ {
using (var bulkCopy = copyOptions == OracleBulkCopyOptions.Default ? using (var bulkCopy = copyOptions == OracleBulkCopyOptions.Default ?

View File

@ -92,6 +92,10 @@ public static partial class FreeSqlSqlServerGlobalExtensions
{ {
if (insert.InternalConnection == null && insert.InternalTransaction == null) if (insert.InternalConnection == null && insert.InternalTransaction == 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 conn = insert.InternalOrm.Ado.MasterPool.Get())
{ {
using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ? using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ?
@ -167,6 +171,10 @@ public static partial class FreeSqlSqlServerGlobalExtensions
{ {
if (insert.InternalConnection == null && insert.InternalTransaction == null) if (insert.InternalConnection == null && insert.InternalTransaction == 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 conn = await insert.InternalOrm.Ado.MasterPool.GetAsync())
{ {
using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ? using (var bulkCopy = copyOptions == SqlBulkCopyOptions.Default ?