From 11e15ac2b0d235e40bc3880c8ad4acd15cf39ef0 Mon Sep 17 00:00:00 2001 From: skx <610262374@qq.com> Date: Sun, 25 Oct 2020 20:17:52 +0800 Subject: [PATCH] 5.0.0.20 --- .../SqlServerTest/Demo/Demo3_Insertable.cs | 22 ++- .../InsertableProvider/InsertableProvider.cs | 9 +- .../InsertableProvider/SubInserable.cs | 178 +++++++++++++----- 3 files changed, 156 insertions(+), 53 deletions(-) diff --git a/Src/Asp.Net/SqlServerTest/Demo/Demo3_Insertable.cs b/Src/Asp.Net/SqlServerTest/Demo/Demo3_Insertable.cs index 39e7df2c7..6153f188e 100644 --- a/Src/Asp.Net/SqlServerTest/Demo/Demo3_Insertable.cs +++ b/Src/Asp.Net/SqlServerTest/Demo/Demo3_Insertable.cs @@ -56,6 +56,9 @@ namespace OrmTest }; db.Insertable(insertObjs).UseSqlServer().ExecuteBlueCopy(); + db.CodeFirst.InitTables(); + Console.WriteLine("SubInsert Start"); + db.Insertable(new Order() { Name = "订单 1", @@ -74,8 +77,8 @@ namespace OrmTest }) .AddSubList(it => it.Items.First().OrderId).ExecuteReturnPrimaryKey(); - db.CodeFirst.InitTables(); - db.Insertable(new SubInsertTest() + db.Insertable(new List() { + new SubInsertTest() { Name="aa", SubInsertTestItem1=new SubInsertTestItem1() { @@ -86,9 +89,22 @@ namespace OrmTest Name ="item" , TestId=2 } + }, + new SubInsertTest() + { + Name="aa", + SubInsertTestItem1=new SubInsertTestItem1() { + a="nn" + }, + SubInsertTestItem=new SubInsertTestItem() + { + Name ="item" , + TestId=2 + } + } }) - .AddSubList(it => it.SubInsertTestItem1) .AddSubList(it => it.SubInsertTestItem.TestId) + .AddSubList(it => it.SubInsertTestItem1) .ExecuteReturnPrimaryKey(); Console.WriteLine("#### Insertable End ####"); diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index 0bac6db4a..195c8d920 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -256,14 +256,17 @@ namespace SqlSugar { Check.Exception(GetPrimaryKeys().Count == 0, typeof(T).Name + " need Primary key"); Check.Exception(GetPrimaryKeys().Count > 1, typeof(T).Name + "Multiple primary keys are not supported"); - Check.Exception(this.InsertObjs.Count() > 1, "SubInserable No Support Insertable(List)"); + //Check.Exception(this.InsertObjs.Count() > 1, "SubInserable No Support Insertable(List)"); //Check.Exception(items.ToString().Contains(".First().")==false, items.ToString()+ " not supported "); - + if (this.InsertObjs == null || this.InsertObjs.Count() == 0) + { + return new SubInsertable(); + } string subMemberName; object sublist; SubInsertable result = new SubInsertable(); result.GetList(this.InsertObjs,items, out subMemberName, out sublist); - result.InsertObject = this.InsertObjs.First(); + result.InsertObjects = this.InsertObjs; result.Context = this.Context; result.SubList = new Dictionary(); result.SubList.Add(subMemberName, sublist); diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SubInserable.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SubInserable.cs index 07c37b416..51dee1211 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SubInserable.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/SubInserable.cs @@ -12,78 +12,162 @@ namespace SqlSugar internal EntityInfo Entity { get; set; } internal Dictionary SubList { get; set; } internal SqlSugarProvider Context { get; set; } - internal T InsertObject { get; set; } + internal T [] InsertObjects { get; set; } internal InsertBuilder InsertBuilder { get; set; } internal string Pk { get; set; } public ISubInsertable AddSubList(Expression> items) { - string subMemberName; - object sublist; - GetList(new T[] { InsertObject }, items,out subMemberName,out sublist); - if (!this.SubList.ContainsKey(subMemberName)) + if (InsertObjects != null&&InsertObjects.Count() > 0) { - this.SubList.Add(subMemberName, sublist); + string subMemberName; + object sublist; + GetList(InsertObjects, items, out subMemberName, out sublist); + if (!this.SubList.ContainsKey(subMemberName)) + { + this.SubList.Add(subMemberName, sublist); + } } return this; } public object ExecuteReturnPrimaryKey() { - List conModel = new List(); - int id = this.Context.Insertable(InsertObject).ExecuteReturnIdentity(); - int count = 1; - object pkValue = null; - var qureyable = this.Context.Queryable(); - if (id.ObjToInt() == 0) + + if (InsertObjects != null && InsertObjects.Count()>0) { - var primaryProperty = this.Entity.Columns.FirstOrDefault(it => - it.PropertyName.Equals(this.Pk, StringComparison.CurrentCultureIgnoreCase) || - it.DbColumnName.Equals(this.Pk, StringComparison.CurrentCultureIgnoreCase) - ); - pkValue = primaryProperty.PropertyInfo.GetValue(InsertObject); - qureyable.In(pkValue); + int count = 1; + foreach (var InsertObject in InsertObjects) + { + List conModel = new List(); + int id = this.Context.Insertable(InsertObject).ExecuteReturnIdentity(); + object pkValue = null; + var qureyable = this.Context.Queryable(); + if (id.ObjToInt() == 0) + { + var primaryProperty = this.Entity.Columns.FirstOrDefault(it => + it.PropertyName.Equals(this.Pk, StringComparison.CurrentCultureIgnoreCase) || + it.DbColumnName.Equals(this.Pk, StringComparison.CurrentCultureIgnoreCase) + ); + pkValue = primaryProperty.PropertyInfo.GetValue(InsertObject); + qureyable.In(pkValue); + } + else + { + qureyable.In(id); + pkValue = id; + } + var data = qureyable.First(); + foreach (var item in this.SubList) + { + + Dictionary insertDictionary = new Dictionary(); + if (item.Value == null) + { + continue; + } + EntityInfo subEntity = null; + if (item.Value is IEnumerable) + { + var list = item.Value as IEnumerable; + if (list.Count() == 0) + { + continue; + } + var type = list.First().GetType(); + this.Context.InitMappingInfo(type); + subEntity = this.Context.EntityMaintenance.GetEntityInfo(type); + foreach (var sbItem in list) + { + SetItems(insertDictionary, sbItem, subEntity, item.Key, pkValue); + } + } + else if (item.Value.GetType().IsClass()) + { + var type = item.Value.GetType(); + this.Context.InitMappingInfo(type); + subEntity = this.Context.EntityMaintenance.GetEntityInfo(type); + SetItems(insertDictionary, item.Value, subEntity, item.Key, pkValue); + } + count += this.Context.Insertable(insertDictionary).AS(subEntity.DbTableName).ExecuteCommand(); + } + } + return count; } else { - qureyable.In(id); - pkValue = id; + return 0; } - var data = qureyable.First(); - foreach (var item in this.SubList) - { + + } + public async Task ExecuteReturnPrimaryKeyAsync() + { - Dictionary insertDictionary = new Dictionary(); - if (item.Value == null) + if (InsertObjects != null && InsertObjects.Count() > 0) + { + int count = 1; + foreach (var InsertObject in InsertObjects) { - continue; - } - EntityInfo subEntity = null; - if (item.Value is IEnumerable) - { - var list=item.Value as IEnumerable; - if (list.Count() == 0) + List conModel = new List(); + int id = await this.Context.Insertable(InsertObject).ExecuteReturnIdentityAsync(); + object pkValue = null; + var qureyable = this.Context.Queryable(); + if (id.ObjToInt() == 0) { - continue; + var primaryProperty = this.Entity.Columns.FirstOrDefault(it => + it.PropertyName.Equals(this.Pk, StringComparison.CurrentCultureIgnoreCase) || + it.DbColumnName.Equals(this.Pk, StringComparison.CurrentCultureIgnoreCase) + ); + pkValue = primaryProperty.PropertyInfo.GetValue(InsertObject); + qureyable.In(pkValue); } - var type= list.First().GetType(); - this.Context.InitMappingInfo(type); - subEntity=this.Context.EntityMaintenance.GetEntityInfo(type); - foreach (var sbItem in list) + else { - SetItems(insertDictionary, sbItem, subEntity,item.Key,pkValue); + qureyable.In(id); + pkValue = id; + } + var data =await qureyable.FirstAsync(); + foreach (var item in this.SubList) + { + + Dictionary insertDictionary = new Dictionary(); + if (item.Value == null) + { + continue; + } + EntityInfo subEntity = null; + if (item.Value is IEnumerable) + { + var list = item.Value as IEnumerable; + if (list.Count() == 0) + { + continue; + } + var type = list.First().GetType(); + this.Context.InitMappingInfo(type); + subEntity = this.Context.EntityMaintenance.GetEntityInfo(type); + foreach (var sbItem in list) + { + SetItems(insertDictionary, sbItem, subEntity, item.Key, pkValue); + } + } + else if (item.Value.GetType().IsClass()) + { + var type = item.Value.GetType(); + this.Context.InitMappingInfo(type); + subEntity = this.Context.EntityMaintenance.GetEntityInfo(type); + SetItems(insertDictionary, item.Value, subEntity, item.Key, pkValue); + } + count +=await this.Context.Insertable(insertDictionary).AS(subEntity.DbTableName).ExecuteCommandAsync(); } } - else if (item.Value.GetType().IsClass()) - { - var type = item.Value.GetType(); - this.Context.InitMappingInfo(type); - subEntity = this.Context.EntityMaintenance.GetEntityInfo(type); - SetItems(insertDictionary, item.Value, subEntity,item.Key,pkValue); - } - count+=this.Context.Insertable(insertDictionary).AS(subEntity.DbTableName).ExecuteCommand(); + return count; } - return count; + else + { + return 0; + } + } public void GetList(T[] inserts,Expression> items, out string subMemberName, out object sublist) {