diff --git a/Src/Asp.Net/SqlServerTest/Demo/Demo8_Saveable.cs b/Src/Asp.Net/SqlServerTest/Demo/Demo8_Saveable.cs index ab2ce8043..e6a7c0864 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/Demo8_Saveable.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/Demo8_Saveable.cs @@ -40,6 +40,21 @@ namespace OrmTest var x2 = db.Storageable(new Order() { Id = 0, Name = "jack" }).ToStorage(); x2.BulkCopy(); x2.BulkUpdate(); + + var dt = db.Queryable().ToDataTable(); + dt.TableName = "order"; + var addRow = dt.NewRow(); + addRow["id"] = 0; + addRow["price"] = 1; + addRow["Name"] = "a"; + dt.Rows.Add(addRow); + var x3 = + db.Storageable(dt) + .WhereColumns("id").ToStorage(); + + x3.AsInsertable.IgnoreColumns("id").ExecuteCommand(); + x3.AsUpdateable.ExecuteCommand(); + Console.WriteLine(""); Console.WriteLine("#### Saveable End ####"); } diff --git a/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/StorageableDataTable.cs b/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/StorageableDataTable.cs index ee982bc65..de335492b 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/StorageableDataTable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SaveableProvider/StorageableDataTable.cs @@ -60,7 +60,7 @@ namespace SqlSugar public StorageableDataTable Saveable(string inserMessage = null, string updateMessage = null) { SplitUpdate(it => it.Any(), updateMessage); - SplitInsert(it => it.Any(), inserMessage); + SplitInsert(it => true, inserMessage); return this; } public StorageableDataTable SplitError(Func conditions, string message = null) @@ -76,6 +76,10 @@ namespace SqlSugar public DataTableResult ToStorage() { + if (whereFuncs == null || whereFuncs.Count == 0) + { + Saveable(); + } foreach (DataRow row in DataTable.Rows) { foreach (var item in whereFuncs.OrderByDescending(it => (int)it.key)) @@ -90,12 +94,39 @@ namespace SqlSugar .ToList(); DataTable.Columns.Remove(SugarGroupId); DataTable.Columns.Remove(SugarErrorMessage); + var inserList = new List>(); + var updateList = new List>(); + if (Groups.Any(it => it.Type == StorageType.Insert.ToString())) + { + foreach (var item in Groups) + { + if (item.Type == StorageType.Insert.ToString()) + { + item.DataTable.Columns.Remove(SugarGroupId); + item.DataTable.Columns.Remove(SugarErrorMessage); + inserList.AddRange(this.Context.Utilities.DataTableToDictionaryList(item.DataTable)); + } + } + } + if (Groups.Any(it => it.Type == StorageType.Update.ToString())) + { + foreach (var item in Groups) + { + if (item.Type == StorageType.Update.ToString()) + { + item.DataTable.Columns.Remove(SugarGroupId); + item.DataTable.Columns.Remove(SugarErrorMessage); + updateList.AddRange(this.Context.Utilities.DataTableToDictionaryList(item.DataTable)); + } + } + } + var tableName = this.Context.Queryable().SqlBuilder.GetTranslationTableName(DataTable.TableName); DataTableResult result = new DataTableResult() { DataTableGroups=Groups, - AsDeleteable=this.Context.Deleteable().AS(DataTable.TableName).Where(""), - AsUpdateable= this.Context.Updateable(new List>()).AS(DataTable.TableName).WhereColumns(Columns), - AsInsertable=this.Context.Insertable(new List>()).AS(DataTable.TableName) + AsDeleteable=this.Context.Deleteable().AS(tableName).Where(""), + AsUpdateable= this.Context.Updateable(updateList).AS(tableName).WhereColumns(Columns), + AsInsertable=this.Context.Insertable(inserList).AS(tableName) }; return result; }