From d433f80e7ba4162b4a24f1a452b2ed2217f7e658 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 4 Nov 2023 00:38:18 +0800 Subject: [PATCH] Synchronization code --- .../Abstract/FastestProvider/Private.cs | 4 ++- .../Dm/SqlBuilder/DmFastBuilder.cs | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs index 5a2151a1d..0eedf2bbc 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs @@ -33,7 +33,9 @@ namespace SqlSugar resultConnector.CharacterSet = this.CharacterSet; return resultConnector; case DbType.Dm: - return new DmFastBuilder(); + var result3= new DmFastBuilder(); + result3.DbFastestProperties.IsOffIdentity = this.IsOffIdentity; + return result3; case DbType.ClickHouse: var resultConnectorClickHouse = InstanceFactory.CreateInstance("SqlSugar.ClickHouse.ClickHouseFastBuilder"); resultConnectorClickHouse.CharacterSet = this.CharacterSet; diff --git a/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmFastBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmFastBuilder.cs index 0a1e1318a..6b7bee9d3 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmFastBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Dm/SqlBuilder/DmFastBuilder.cs @@ -17,7 +17,38 @@ namespace SqlSugar }; public async Task ExecuteBulkCopyAsync(DataTable dt) { + if (DbFastestProperties?.IsOffIdentity == true) + { + var isNoTran = this.Context.Ado.IsNoTran()&&this.Context.CurrentConnectionConfig.IsAutoCloseConnection; + try + { + if(isNoTran) + this.Context.Ado.BeginTran(); + this.Context.Ado.ExecuteCommand($"SET IDENTITY_INSERT {dt.TableName} ON"); + var result=await _Execute(dt); + this.Context.Ado.ExecuteCommand($"SET IDENTITY_INSERT {dt.TableName} OFF"); + + if (isNoTran) + this.Context.Ado.CommitTran(); + + return result; + } + catch (Exception) + { + if (isNoTran) + this.Context.Ado.CommitTran(); + throw; + } + } + else + { + return await _Execute(dt); + } + } + + private async Task _Execute(DataTable dt) + { DmBulkCopy bulkCopy = GetBulkCopyInstance(); bulkCopy.DestinationTableName = dt.TableName; try @@ -33,6 +64,7 @@ namespace SqlSugar CloseDb(); return dt.Rows.Count; } + public DmBulkCopy GetBulkCopyInstance() { DmBulkCopy copy;