diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index 3696cea80..8cdd64744 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -191,7 +191,7 @@ namespace SqlSugar dbColumns.Any(dc => dc.DbColumnName.Equals(ec.DbColumnName) && ((ec.Length != dc.Length && !UtilMethods.GetUnderType(ec.PropertyInfo).IsEnum() && UtilMethods.GetUnderType(ec.PropertyInfo).IsIn(UtilConstants.StringType)) || ec.IsNullable != dc.IsNullable || - IsSamgeType(ec, dc)))).ToList(); + IsNoSamgeType(ec, dc)))).ToList(); var renameColumns = entityColumns .Where(it => !string.IsNullOrEmpty(it.OldDbColumnName)) .Where(entityColumn => dbColumns.Any(dbColumn => entityColumn.OldDbColumnName.Equals(dbColumn.DbColumnName, StringComparison.CurrentCultureIgnoreCase))) @@ -343,7 +343,7 @@ namespace SqlSugar } } - protected virtual bool IsSamgeType(EntityColumnInfo ec, DbColumnInfo dc) + protected virtual bool IsNoSamgeType(EntityColumnInfo ec, DbColumnInfo dc) { if (!string.IsNullOrEmpty(ec.DataType)) { @@ -365,6 +365,22 @@ namespace SqlSugar { return false; } + if (properyTypeName?.ToLower() == "varchar" && dataType?.ToLower() == "string") + { + return false; + } + if (properyTypeName?.ToLower() == "number" && dataType?.ToLower() == "decimal") + { + return false; + } + if (properyTypeName?.ToLower() == "int" && dataType?.ToLower() == "decimal"&&dc.Length==22&&dc.Scale==0&&this.Context.CurrentConnectionConfig.DbType==DbType.Oracle) + { + return false; + } + if (properyTypeName?.ToLower() == "date" && dataType?.ToLower() == "datetime") + { + return false; + } return properyTypeName != dataType; } private static string GetType(string name) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index f986e2e3b..419a01155 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -119,6 +119,13 @@ namespace SqlSugar BindClass(generator, result, columnInfo, ReaderKeys.First(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase))); } } + else if (!isGemo && columnInfo.IsJson && columnInfo.PropertyInfo.PropertyType != UtilConstants.StringType) + { //json is struct + if (this.ReaderKeys.Any(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase))) + { + BindClass(generator, result, columnInfo, ReaderKeys.First(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase))); + } + } else { if (this.ReaderKeys.Any(it => it.Equals(fileName, StringComparison.CurrentCultureIgnoreCase))) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index c8bf71b2b..0fb37be67 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -21,7 +21,7 @@ namespace SqlSugar public bool IsEnableDiffLogEvent { get; set; } public DiffLogModel diffModel { get; set; } public List tempPrimaryKeys { get; set; } - private Action RemoveCacheFunc { get; set; } + internal Action RemoveCacheFunc { get; set; } public EntityInfo EntityInfo { get @@ -272,6 +272,13 @@ namespace SqlSugar result.deleteobj = this; return result; } + public LogicDeleteProvider IsLogic() + { + LogicDeleteProvider result = new LogicDeleteProvider(); + result.DeleteBuilder = this.DeleteBuilder; + result.Deleteable = this; + return result; + } public IDeleteable RemoveDataCache(string likeString) { this.RemoveCacheFunc = () => diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/LogicDeleteProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/LogicDeleteProvider.cs new file mode 100644 index 000000000..103b189e8 --- /dev/null +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/DeleteProvider/LogicDeleteProvider.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SqlSugar +{ + public class LogicDeleteProvider where T : class, new() + { + public DeleteableProvider Deleteable { get; set; } + public DeleteBuilder DeleteBuilder { get; set; } + + public int ExecuteCommand(string LogicFieldName = null) + { + ISqlSugarClient db; + List pars; + string where; + LogicFieldName = _ExecuteCommand(LogicFieldName, out db, out where, out pars); + var updateable = db.Updateable().SetColumns(LogicFieldName, "@IsDeleted"); + if (pars != null) + updateable.UpdateBuilder.Parameters.AddRange(pars); + Convert(updateable as UpdateableProvider); + var result = updateable.Where(where, new { IsDeleted = true }).ExecuteCommand(); + return result; + } + public async Task ExecuteCommandAsync(string LogicFieldName = null) + { + ISqlSugarClient db; + List pars; + string where; + LogicFieldName = _ExecuteCommand(LogicFieldName, out db, out where, out pars); + var updateable = db.Updateable().SetColumns(LogicFieldName, "@IsDeleted"); + if (pars != null) + updateable.UpdateBuilder.Parameters.AddRange(pars); + Convert(updateable as UpdateableProvider); + var result =await updateable.Where(where, new { IsDeleted = true }).ExecuteCommandAsync(); + return result; + } + + private void Convert(UpdateableProvider updateable) + { + updateable.IsEnableDiffLogEvent = Deleteable.IsEnableDiffLogEvent; + updateable.diffModel = Deleteable.diffModel; + updateable.UpdateBuilder.TableWithString = DeleteBuilder.TableWithString; + updateable.RemoveCacheFunc = Deleteable.RemoveCacheFunc; + } + + private string _ExecuteCommand(string LogicFieldName, out ISqlSugarClient db, out string where, out List pars) + { + var entityInfo = Deleteable.EntityInfo; + db = Deleteable.Context; + where = DeleteBuilder.GetWhereString.Substring(5); + pars = DeleteBuilder.Parameters; + if (LogicFieldName.IsNullOrEmpty()) + { + var column = entityInfo.Columns.FirstOrDefault(it => + it.PropertyName.EqualCase("isdelete") || + it.PropertyName.EqualCase("isdeleted") || + it.DbColumnName.EqualCase("isdelete") || + it.DbColumnName.EqualCase("isdeleted")); + if (column != null) + { + LogicFieldName = column.DbColumnName; + } + } + Check.Exception(LogicFieldName == null, ErrorMessage.GetThrowMessage( + $"{entityInfo.EntityName} is not isdelete or isdeleted" + , $"{entityInfo.EntityName} 没有IsDelete或者IsDeleted 的属性, 你也可以用 IsLogic().ExecuteCommand(\"列名\")")); + return LogicFieldName; + } + } +} diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs index 934fc2e07..db1051bc7 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/EntityMaintenance/EntityMaintenance.cs @@ -17,7 +17,7 @@ namespace SqlSugar } public EntityInfo GetEntityInfo(Type type) { - string cacheKey = "GetEntityInfo" + type.FullName; + string cacheKey = "GetEntityInfo"+ type.GetHashCode() + type.FullName; return this.Context.Utilities.GetReflectionInoCacheInstance().GetOrCreate(cacheKey, () => { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index fe9b2a91c..dc6d19ef8 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -359,7 +359,7 @@ namespace SqlSugar public IInsertable EnableDiffLogEvent(object businessData = null) { - Check.Exception(this.InsertObjs.HasValue() && this.InsertObjs.Count() > 1, "DiffLog does not support batch operations"); + //Check.Exception(this.InsertObjs.HasValue() && this.InsertObjs.Count() > 1, "DiffLog does not support batch operations"); diffModel = new DiffLogModel(); this.IsEnableDiffLogEvent = true; diffModel.BusinessData = businessData; @@ -769,6 +769,45 @@ namespace SqlSugar } } private List GetDiffTable(string sql, long? identity) + { + + if (GetIdentityKeys().HasValue() && this.InsertObjs.Count() > 1) + { + return GetDiffTableByEntity(); + } + else + { + return GetDiffTableBySql(identity); + } + + } + + private List GetDiffTableByEntity() + { + List parameters = new List(); + List result = new List(); + var dt2 = this.Context.Utilities.ListToDataTable(this.InsertObjs.ToList()); + foreach (DataRow row in dt2.Rows) + { + DiffLogTableInfo item = new DiffLogTableInfo(); + item.TableDescription = this.EntityInfo.TableDescription; + item.TableName = this.EntityInfo.DbTableName; + item.Columns = new List(); + foreach (DataColumn col in dt2.Columns) + { + + DiffLogColumnInfo addItem = new DiffLogColumnInfo(); + addItem.Value = row[col.ColumnName]; + addItem.ColumnName = col.ColumnName; + addItem.ColumnDescription = this.EntityInfo.Columns.Where(it => it.DbColumnName != null).FirstOrDefault(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase))?.ColumnDescription; + item.Columns.Add(addItem); + } + result.Add(item); + } + return result; + } + + private List GetDiffTableBySql(long? identity) { List parameters = new List(); List result = new List(); @@ -786,9 +825,9 @@ namespace SqlSugar var fielddName = item.DbColumnName; var filedObject = this.EntityInfo.Columns.FirstOrDefault(it => it.PropertyName == item.PropertyName).PropertyInfo.GetValue(this.InsertObjs.Last(), null); var fieldValue = filedObject.ObjToString(); - if (filedObject != null && filedObject.GetType() != typeof(string)&&this.Context.CurrentConnectionConfig.DbType==DbType.PostgreSQL) + if (filedObject != null && filedObject.GetType() != typeof(string) && this.Context.CurrentConnectionConfig.DbType == DbType.PostgreSQL) { - cons.Add(new ConditionalModel() { ConditionalType = ConditionalType.Equal, FieldName = fielddName, FieldValue = fieldValue,FieldValueConvertFunc= it => UtilMethods.ChangeType2(it, filedObject.GetType()) }); + cons.Add(new ConditionalModel() { ConditionalType = ConditionalType.Equal, FieldName = fielddName, FieldValue = fieldValue, FieldValueConvertFunc = it => UtilMethods.ChangeType2(it, filedObject.GetType()) }); } else { @@ -814,7 +853,7 @@ namespace SqlSugar DiffLogColumnInfo addItem = new DiffLogColumnInfo(); addItem.Value = row[col.ColumnName]; addItem.ColumnName = col.ColumnName; - addItem.ColumnDescription = this.EntityInfo.Columns.Where(it=>it.DbColumnName!=null).First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription; + addItem.ColumnDescription = this.EntityInfo.Columns.Where(it => it.DbColumnName != null).First(it => it.DbColumnName.Equals(col.ColumnName, StringComparison.CurrentCultureIgnoreCase)).ColumnDescription; item.Columns.Add(addItem); } result.Add(item); @@ -834,7 +873,6 @@ namespace SqlSugar }).ToList(); return new List() { diffTable }; } - } public IInsertable CallEntityMethod(Expression> method) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index dcbd922c3..7227bbd25 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -32,7 +32,7 @@ namespace SqlSugar public bool IsAs { get; set; } public bool IsEnableDiffLogEvent { get; set; } public DiffLogModel diffModel { get; set; } - private Action RemoveCacheFunc { get; set; } + internal Action RemoveCacheFunc { get; set; } private int SetColumnsIndex { get; set; } private List columns { get; set; } #endregion @@ -142,7 +142,7 @@ namespace SqlSugar } public IUpdateable EnableDiffLogEvent(object businessData = null) { - Check.Exception(this.UpdateObjs.HasValue() && this.UpdateObjs.Count() > 1, "DiffLog does not support batch operations"); + //Check.Exception(this.UpdateObjs.HasValue() && this.UpdateObjs.Count() > 1, "DiffLog does not support batch operations"); diffModel = new DiffLogModel(); this.IsEnableDiffLogEvent = true; diffModel.BusinessData = businessData; @@ -291,6 +291,19 @@ namespace SqlSugar #endregion #region Update by expression + public IUpdateable SetColumns(string fieldName, object fieldValue) + { + ThrowUpdateByObject(); + var columnInfo = this.EntityInfo.Columns.FirstOrDefault(it => it.PropertyName.EqualCase(fieldName)); + if (columnInfo != null) + { + fieldName = columnInfo.DbColumnName; + } + UpdateBuilder.SetValues.Add(new KeyValuePair(fieldName, fieldValue+"")); + this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull == false && IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); + AppendSets(); + return this; + } public IUpdateable SetColumns(Expression> columns) { ThrowUpdateByObject(); @@ -794,8 +807,16 @@ namespace SqlSugar private List GetDiffTable(string sql, List parameters) { List result = new List(); - var whereSql = Regex.Replace(sql, ".* WHERE ", "", RegexOptions.Singleline); - var dt = this.Context.Queryable().Where(whereSql).AddParameters(parameters).ToDataTable(); + DataTable dt = null; + if (this.UpdateParameterIsNull) + { + var whereSql = Regex.Replace(sql, ".* WHERE ", "", RegexOptions.Singleline); + dt = this.Context.Queryable().Where(whereSql).AddParameters(parameters).ToDataTable(); + } + else + { + dt=this.Context.Queryable().WhereClassByPrimaryKey(this.UpdateObjs.ToList()).ToDataTable(); + } if (dt.Rows != null && dt.Rows.Count > 0) { foreach (DataRow row in dt.Rows) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs index 3a32f4994..6b3adabb6 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Data; using System.Data.Common; @@ -10,6 +10,7 @@ namespace SqlSugar public class SugarParameter : DbParameter { public bool IsRefCursor { get; set; } + public bool IsClob { get; set; } public SugarParameter(string name, object value) { this.Value = value; @@ -128,6 +129,10 @@ namespace SqlSugar { this.DbType = System.Data.DbType.Time; } + else if (type?.Name=="Geometry") + { + this.DbType = System.Data.DbType.Object; + } else if (type!=null&&type.IsEnum()) { this.DbType = System.Data.DbType.Int64; diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs index 9da83f812..f2bda9590 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IDeleteable.cs @@ -37,6 +37,7 @@ namespace SqlSugar KeyValuePair> ToSql(); IDeleteable EnableQueryFilter(); SplitTableDeleteProvider SplitTable(Func, IEnumerable> getTableNamesFunc); + LogicDeleteProvider IsLogic(); void AddQueue(); } } diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISimpleClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISimpleClient.cs index cb0c630c0..3e11cf710 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISimpleClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/ISimpleClient.cs @@ -18,6 +18,7 @@ namespace SqlSugar ITenant AsTenant(); IUpdateable AsUpdateable(List updateObjs); IUpdateable AsUpdateable(T updateObj); + IUpdateable AsUpdateable(); IUpdateable AsUpdateable(T[] updateObjs); int Count(Expression> whereExpression); bool Delete(Expression> whereExpression); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs index 0718cdc22..733deb9e7 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Interface/IUpdateable.cs @@ -66,7 +66,7 @@ namespace SqlSugar /// /// IUpdateable SetColumns(Expression> columns); - + IUpdateable SetColumns(string fieldName,object fieldValue); IUpdateable UpdateColumnsIF(bool isUpdateColumns,Expression> columns); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs index 8abdbc7d4..eabbb6d8b 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/DbMaintenance/OracleDbMaintenance.cs @@ -360,7 +360,9 @@ namespace SqlSugar private List GetColumnInfosByTableName(string tableName) { - string sql = "select * from " +SqlBuilder.GetTranslationTableName(tableName) + " WHERE 1=2 "; + string sql = "select * /* " + Guid.NewGuid() + " */ from " + SqlBuilder.GetTranslationTableName(tableName) + " WHERE 1=2 "; + this.Context.Utilities.RemoveCache>("DbMaintenanceProvider.GetFieldComment."+tableName); + this.Context.Utilities.RemoveCache>("DbMaintenanceProvider.GetPrimaryKeyByTableNames." + this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower()); var oldIsEnableLog = this.Context.Ado.IsEnableLogEvent; this.Context.Ado.IsEnableLogEvent = false; using (DbDataReader reader = (DbDataReader)this.Context.Ado.GetDataReader(sql)) diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs index 61d872b1c..560dc8815 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/Realization/Oracle/Updateable/OracleUpdateable.cs @@ -16,7 +16,15 @@ namespace SqlSugar { if (base.UpdateObjs.Count() == 1) { - return base.ExecuteCommand(); + var resultl= base.ExecuteCommand(); + if (resultl == -1) + { + return 1; + } + else + { + return resultl; + } } else if (base.UpdateObjs.Count() == 0) { diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs index 7ba82cedc..eac557f9a 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SimpleClient.cs @@ -74,6 +74,10 @@ namespace SqlSugar { return Context.Updateable(updateObjs); } + public IUpdateable AsUpdateable() + { + return Context.Updateable(); + } public IDeleteable AsDeleteable() { return Context.Deleteable(); diff --git a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs index 58863ef59..456c53c97 100644 --- a/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs +++ b/Src/Asp.NetCore2/SqlSeverTest/SqlSugar/SqlSugarClient.cs @@ -619,6 +619,10 @@ namespace SqlSugar if (db.Context == null) { db.Context = new SqlSugarProvider(db.ConnectionConfig); + if (_IsAllTran&&db.Context.Ado.Transaction==null) + { + db.Context.Ado.BeginTran(); + } } var intiAop=db.Context.Aop; if (db.Context.CurrentConnectionConfig.AopEvents == null)