diff --git a/Src/Asp.Net/OracleTest/Demos/2_Update.cs b/Src/Asp.Net/OracleTest/Demos/2_Update.cs index cad93a666..c1078e94a 100644 --- a/Src/Asp.Net/OracleTest/Demos/2_Update.cs +++ b/Src/Asp.Net/OracleTest/Demos/2_Update.cs @@ -38,6 +38,11 @@ namespace OrmTest.Demo //Use Lock var t6 = db.Updateable(updateObj).With(SqlWith.UpdLock).ExecuteCommand(); + var dt = new Dictionary(); + dt.Add("id", 1); + dt.Add("name", "1"); + var t66 = db.Updateable(dt).AS("student").With(SqlWith.UpdLock).ExecuteCommand(); + //update List //var t7 = db.Updateable(updateObjs).ExecuteCommand(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 15b70d6d2..d6de42267 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -226,26 +226,59 @@ namespace SqlSugar foreach (var item in UpdateObjs) { List updateItem = new List(); - foreach (var column in EntityInfo.Columns) + var isDic = item is Dictionary; + if (isDic) { - var columnInfo = new DbColumnInfo() - { - Value = column.PropertyInfo.GetValue(item, null), - DbColumnName = GetDbColumnName(column.PropertyName), - PropertyName = column.PropertyName, - PropertyType = UtilMethods.GetUnderType(column.PropertyInfo), - TableId = i - }; - if (columnInfo.PropertyType.IsEnum()) - { - columnInfo.Value = Convert.ToInt64(columnInfo.Value); - } - updateItem.Add(columnInfo); + SetUpdateItemByDic(i, item, updateItem); + } + else + { + SetUpdateItemByEntity(i, item, updateItem); } - this.UpdateBuilder.DbColumnInfoList.AddRange(updateItem); ++i; } } + private void SetUpdateItemByDic(int i, T item, List updateItem) + { + foreach (var column in item as Dictionary) + { + var columnInfo = new DbColumnInfo() + { + Value = column.Value, + DbColumnName =column.Key, + PropertyName = column.Key, + PropertyType = UtilMethods.GetUnderType(column.Value.GetType()), + TableId = i + }; + if (columnInfo.PropertyType.IsEnum()) + { + columnInfo.Value = Convert.ToInt64(columnInfo.Value); + } + updateItem.Add(columnInfo); + } + this.UpdateBuilder.DbColumnInfoList.AddRange(updateItem); + } + private void SetUpdateItemByEntity(int i, T item, List updateItem) + { + foreach (var column in EntityInfo.Columns) + { + var columnInfo = new DbColumnInfo() + { + Value = column.PropertyInfo.GetValue(item, null), + DbColumnName = GetDbColumnName(column.PropertyName), + PropertyName = column.PropertyName, + PropertyType = UtilMethods.GetUnderType(column.PropertyInfo), + TableId = i + }; + if (columnInfo.PropertyType.IsEnum()) + { + columnInfo.Value = Convert.ToInt64(columnInfo.Value); + } + updateItem.Add(columnInfo); + } + this.UpdateBuilder.DbColumnInfoList.AddRange(updateItem); + } + private void PreToSql() { UpdateBuilder.PrimaryKeys = GetPrimaryKeys();