diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index 71a3f8d61..f7ce73c16 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -85,6 +85,10 @@ namespace SqlSugar { InitTables(typeof(T), typeof(T2), typeof(T3), typeof(T4)); } + public void InitTables() + { + InitTables(typeof(T), typeof(T2), typeof(T3), typeof(T4),typeof(T5)); + } public virtual void InitTables(params Type[] entityTypes) { if (entityTypes.HasValue()) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index c45834d77..3d63ec00c 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -263,6 +263,15 @@ namespace SqlSugar TruncateTable(); return true; } + public virtual bool TruncateTable() + { + TruncateTable(); + TruncateTable(); + TruncateTable(); + TruncateTable(); + TruncateTable(); + return true; + } public virtual bool DropColumn(string tableName, string columnName) { columnName = this.SqlBuilder.GetTranslationColumnName(columnName); diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs index 03430b01d..98671784a 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/DeleteNavProvider.cs @@ -15,12 +15,27 @@ namespace SqlSugar public DeleteNavProvider ThenInclude(Expression> expression) { - return null; + throw new Exception("开发中7月15号之前上线"); } - - public DeleteNavProvider AsNav() + public DeleteNavProvider Include(Expression> expression) { - return null; + throw new Exception("开发中7月15号之前上线"); + } + public DeleteNavProvider ThenInclude(Expression>> expression) + { + throw new Exception("开发中7月15号之前上线"); + } + public DeleteNavProvider Include(Expression>> expression) + { + throw new Exception("开发中7月15号之前上线"); + } + private DeleteNavProvider AsNav() + { + throw new Exception("开发中7月15号之前上线"); + } + public bool ExecuteCommand() + { + return true; } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderHelper.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderHelper.cs index 878c7fdf1..531b71f64 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderHelper.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderHelper.cs @@ -67,7 +67,7 @@ namespace SqlSugar var pkColumn = entity.Columns.FirstOrDefault(it => it.IsPrimarykey == true); if (nav.Navigat.Name2.HasValue()) { - pkColumn = _ParentEntity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2); + pkColumn = entity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2); } return pkColumn; } @@ -76,42 +76,66 @@ namespace SqlSugar var fkColumn = entity.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name); return fkColumn; } - private void InsertDatas(List children, EntityColumnInfo pkColumn) where TChild : class, new() + private void InsertDatas(List children, EntityColumnInfo pkColumn, EntityColumnInfo NavColumn=null) where TChild : class, new() { children = children.Distinct().ToList(); var x = this._Context.Storageable(children).WhereColumns(new string[] { pkColumn.PropertyName }).ToStorage(); var insertData = children = x.InsertList.Select(it => it.Item).ToList(); - if (pkColumn.IsIdentity||pkColumn.OracleSequenceName.HasValue()) + Check.ExceptionEasy(pkColumn==null&&NavColumn==null,$"The entity is invalid",$"实体错误无法使用导航"); + InitData(pkColumn, insertData); + this._ParentList = children.Cast().ToList(); + } + + private void InitData(EntityColumnInfo pkColumn, List insertData) where TChild : class, new() + { + if (pkColumn.IsIdentity || pkColumn.OracleSequenceName.HasValue()) { InsertIdentity(insertData); } - else if (pkColumn.UnderType==UtilConstants.LongType&&pkColumn.IsIdentity==false) + else if (pkColumn.UnderType == UtilConstants.LongType) { - foreach (var child in insertData) - { - if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child))) - { - pkColumn.PropertyInfo.SetValue(child, SnowFlakeSingle.Instance.NextId()); - } - } - this._Context.Insertable(insertData).ExecuteCommand(); + SetValue(pkColumn, insertData, ()=>SnowFlakeSingle.Instance.NextId()); } - else if (pkColumn.UnderType == UtilConstants.GuidType && pkColumn.IsIdentity == false) + else if (pkColumn.UnderType == UtilConstants.GuidType) { - foreach (var child in insertData) - { - if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child))) - { - pkColumn.PropertyInfo.SetValue(child, Guid.NewGuid()); - } - } - this._Context.Insertable(insertData).ExecuteCommand(); + SetValue(pkColumn, insertData, () => Guid.NewGuid()); + } + else if (pkColumn.UnderType == UtilConstants.StringType) + { + SetValue(pkColumn, insertData, () => Guid.NewGuid().ToString()); + } + else if (pkColumn.UnderType == UtilConstants.IntType) + { + SetError(pkColumn, insertData); } else { - this._Context.Insertable(insertData).ExecuteCommand(); + } - this._ParentList = children.Cast().ToList(); + } + + private void SetValue(EntityColumnInfo pkColumn, List insertData,Func value) where TChild : class, new() + { + foreach (var child in insertData) + { + if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child))) + { + pkColumn.PropertyInfo.SetValue(child, value()); + } + } + this._Context.Insertable(insertData).ExecuteCommand(); + } + private void SetError(EntityColumnInfo pkColumn, List insertData) where TChild : class, new() + { + foreach (var child in insertData) + { + if (IsDefaultValue(pkColumn.PropertyInfo.GetValue(child))) + { + var name = pkColumn.EntityName + " " + pkColumn.DbColumnName; + Check.ExceptionEasy($"The field {name} is not an autoassignment type and requires an assignment", $"字段{name}不是可自动赋值类型,需要赋值"); + } + } + this._Context.Insertable(insertData).ExecuteCommand(); } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToMany.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToMany.cs index 1ba69062d..c11a670d7 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToMany.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToMany.cs @@ -19,6 +19,11 @@ namespace SqlSugar var thisPkColumn = GetPkColumnByNav(thisEntity, nav); var thisFkColumn= GetFKColumnByNav(thisEntity, nav); EntityColumnInfo parentPkColumn = GetParentPkColumn(); + EntityColumnInfo parentNavColumn = GetParentPkNavColumn(nav); + if (parentNavColumn != null) + { + parentPkColumn = parentNavColumn; + } foreach (var item in parentList) { var parentValue = parentPkColumn.PropertyInfo.GetValue(item); @@ -45,6 +50,15 @@ namespace SqlSugar } return parentPkColumn; } + private EntityColumnInfo GetParentPkNavColumn(EntityColumnInfo nav) + { + EntityColumnInfo result = null; + if (nav.Navigat.Name2.HasValue()) + { + result = _ParentPkColumn = this._ParentEntity.Columns.FirstOrDefault(it => it.PropertyName== nav.Navigat.Name2); + } + return result; + } private void SetNewParent(EntityInfo entityInfo,EntityColumnInfo entityColumnInfo) where TChild : class, new() { diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToOne.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToOne.cs index 5f410bf3b..0d696f128 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToOne.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavProviderOneToOne.cs @@ -31,6 +31,14 @@ namespace SqlSugar { navPropertyValue = pkValue; } + + } + if (!IsDefaultValue(navPropertyValue)) + { + this._Context.Updateable + ().AS(parentEntity.DbTableName) + .SetColumns(parentColumn.DbColumnName, navPropertyValue) + .Where(parentPkColumn.DbColumnName, "=", parentPkColumn.PropertyInfo.GetValue(parent)).ExecuteCommand(); } if (IsDefaultValue(navPropertyValue)) { diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs index bf4ca0f23..95b6f2701 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/InsertNavTask.cs @@ -13,7 +13,7 @@ namespace SqlSugar public SqlSugarProvider Context { get; set; } public InsertNavProvider insertNavProvider { get; set; } - public InsertNavTask ThenInclude(Expression> expression) where TChild : class, new() + public InsertNavTask Include(Expression> expression) where TChild : class, new() { this.Context = insertNavProvider._Context; InsertNavTask result = new InsertNavTask(); @@ -22,7 +22,7 @@ namespace SqlSugar result.Context = this.Context; return result; } - public InsertNavTask ThenInclude(Expression>> expression) where TChild : class, new() + public InsertNavTask Include(Expression>> expression) where TChild : class, new() { this.Context = insertNavProvider._Context; InsertNavTask result = new InsertNavTask(); @@ -52,7 +52,15 @@ namespace SqlSugar result.Context = this.Context; return result; } - public void ExecuteCommand() + public InsertNavTask Include(Expression> expression) where TChild : class, new() + { + return AsNav().ThenInclude(expression); + } + public InsertNavTask Include(Expression>> expression) where TChild : class, new() + { + return AsNav().ThenInclude(expression); + } + public bool ExecuteCommand() { var hasTran = this.Context.Ado.Transaction != null; if (hasTran) @@ -66,17 +74,19 @@ namespace SqlSugar PreFunc(); }, ex => throw ex); } + return true; } - public async Task ExecuteCommandAsync() + public async Task ExecuteCommandAsync() { await Task.Run(async () => { ExecuteCommand(); await Task.Delay(0); - }); + }); + return true; } - public InsertNavTask AsNav() + private InsertNavTask AsNav() { InsertNavTask result = new InsertNavTask(); Func> func = () => PreFunc().AsNav(); diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs index 3f7b1ac33..f1904cbac 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/ExecuteNavProvider/UpdateInsert.cs @@ -15,10 +15,25 @@ namespace SqlSugar public UpdateNavProvider ThenInclude(Expression> expression) { - return null; + throw new Exception("开发中7月15号之前上线"); } - - public UpdateNavProvider AsNav() + public UpdateNavProvider Include(Expression> expression) + { + throw new Exception("开发中7月15号之前上线"); + } + public UpdateNavProvider ThenInclude(Expression>> expression) + { + throw new Exception("开发中7月15号之前上线"); + } + public UpdateNavProvider Include(Expression>> expression) + { + throw new Exception("开发中7月15号之前上线"); + } + public bool ExecuteCommand() + { + return true; + } + private UpdateNavProvider AsNav() { return null; } diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/ICodeFirst.cs b/Src/Asp.NetCore2/SqlSugar/Interface/ICodeFirst.cs index 9483e7b36..20cacc311 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/ICodeFirst.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/ICodeFirst.cs @@ -17,6 +17,7 @@ namespace SqlSugar void InitTables(); void InitTables(); void InitTables(); + void InitTables(); SplitCodeFirstProvider SplitTables(); TableDifferenceProvider GetDifferenceTables(); TableDifferenceProvider GetDifferenceTables(params Type[] types); diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/IDbMaintenance.cs b/Src/Asp.NetCore2/SqlSugar/Interface/IDbMaintenance.cs index 324c0f8fb..24ebdadb0 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/IDbMaintenance.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/IDbMaintenance.cs @@ -36,6 +36,7 @@ namespace SqlSugar bool TruncateTable(); bool TruncateTable(); bool TruncateTable(); + bool TruncateTable(); bool CreateTable(string tableName, List columns,bool isCreatePrimaryKey=true); bool AddColumn(string tableName, DbColumnInfo column); bool UpdateColumn(string tableName, DbColumnInfo column);