From ff8820108cf90cd81a1e87eefdc0e7501a7cd4a4 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 8 Apr 2018 15:34:57 +0800 Subject: [PATCH] Insert support pure Dictionary --- Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs | 5 ++ .../InsertableProvider/InsertableProvider.cs | 61 ++++++++++++++----- 2 files changed, 51 insertions(+), 15 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs b/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs index 4e2de445d..6d48bf5f8 100644 --- a/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs +++ b/Src/Asp.Net/SqlServerTest/Demos/3_Insert.cs @@ -59,6 +59,11 @@ namespace OrmTest.Demo var t12 = db.Insertable(insertObj).IgnoreColumns(it => it == "Name" || it == "TestId").ExecuteReturnIdentityAsync(); t12.Wait(); + + + var dt = new Dictionary(); + dt.Add("name", "1"); + var t66 = db.Insertable(dt).AS("student").ExecuteReturnEntity(); } } } diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 79fd40639..bc11b2d30 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -264,27 +264,58 @@ namespace SqlSugar foreach (var item in InsertObjs) { List insertItem = new List(); - foreach (var column in EntityInfo.Columns) + if (item is Dictionary) { - if (column.IsIgnore || column.IsOnlyIgnoreInsert) continue; - 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); - } - insertItem.Add(columnInfo); + SetInsertItemByDic(i, item, insertItem); + } + else + { + SetInsertItemByEntity(i, item, insertItem); } this.InsertBuilder.DbColumnInfoList.AddRange(insertItem); ++i; } } + private void SetInsertItemByDic(int i, T item, List insertItem) + { + 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); + } + insertItem.Add(columnInfo); + } + } + private void SetInsertItemByEntity(int i, T item, List insertItem) + { + foreach (var column in EntityInfo.Columns) + { + if (column.IsIgnore || column.IsOnlyIgnoreInsert) continue; + 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); + } + insertItem.Add(columnInfo); + } + } + private string GetDbColumnName(string propertyName) { if (!IsMappingColumns)