diff --git a/Src/Asp.NetCore2/SqlSugar.OdbcCore/GBase/SqlBuilder/GBaseFastBuilder.cs b/Src/Asp.NetCore2/SqlSugar.OdbcCore/GBase/SqlBuilder/GBaseFastBuilder.cs index 5cceb8a86d075c5816fda6f35c9131b2ab27fb4a..0811eb114dfe041a55f2eaaca3c93ee5f1a98a58 100644 --- a/Src/Asp.NetCore2/SqlSugar.OdbcCore/GBase/SqlBuilder/GBaseFastBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.OdbcCore/GBase/SqlBuilder/GBaseFastBuilder.cs @@ -1,10 +1,6 @@ using Microsoft.Data.SqlClient; using System; -using System.Collections.Generic; using System.Data; -using System.Data.SqlClient; -using System.Linq; -using System.Text; using System.Threading.Tasks; namespace SqlSugar.Odbc diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 30f9658364cc13b66916f6d52f3e4b32392f53d3..5638a7a7a5da75843cbcf55f9cab40466acce668 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -177,13 +177,6 @@ namespace SqlSugar OneToMany(pageList, selector, listItemEntity, navObjectNamePropety, navObjectNameColumnInfo); }); } - else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigateType.OneToManyByArrayList) - { - this.Context.Utilities.PageEach(list, 5000, pageList => - { - OneToManyByArrayList(pageList, selector, listItemEntity, navObjectNamePropety, navObjectNameColumnInfo); - }); - } else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigateType.ManyToOne) { this.Context.Utilities.PageEach(list, 5000, pageList => @@ -271,7 +264,11 @@ namespace SqlSugar var sql = GetWhereSql(GetCrossDatabase(abDb, bEntity)); if (sql.SelectString == null) { + //加载指定列 + var queryPropertyNames = GetQueryPropertyNames(navObjectNamePropety); + var columns = bEntityInfo.Columns.Where(it => !it.IsIgnore) + .WhereIF(queryPropertyNames != null && queryPropertyNames.Length > 0, it => queryPropertyNames.Contains(it.PropertyName)) .Select(it => GetOneToManySelectByColumnInfo(it, abDb)).ToList(); sql.SelectString = String.Join(",", columns); } @@ -361,42 +358,24 @@ namespace SqlSugar private void OneToOne(List list, Func, List> selector, EntityInfo listItemEntity, System.Reflection.PropertyInfo navObjectNamePropety, EntityColumnInfo navObjectNameColumnInfo) { var navColumn = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name); - Check.ExceptionEasy(navColumn == null, "OneToOne navigation configuration error", $"OneToOne导航配置错误: 实体{listItemEntity.EntityName} 不存在{navObjectNameColumnInfo.Navigat.Name}"); + Check.ExceptionEasy(navColumn == null, "OneToOne navigation configuration error", $"OneToOne导航配置错误: 实体{ listItemEntity.EntityName } 不存在{navObjectNameColumnInfo.Navigat.Name}"); var navType = navObjectNamePropety.PropertyType; var db = this.Context; - db = GetCrossDatabase(db, navType); + db = GetCrossDatabase(db,navType); var navEntityInfo = db.EntityMaintenance.GetEntityInfo(navType); db.InitMappingInfo(navEntityInfo.Type); var navPkColumn = navEntityInfo.Columns.Where(it => it.IsPrimarykey).FirstOrDefault(); var navPkCount = navEntityInfo.Columns.Where(it => it.IsPrimarykey).Count(); - Check.ExceptionEasy(navPkColumn == null && navObjectNameColumnInfo.Navigat.Name2 == null, navEntityInfo.EntityName + "need primarykey", navEntityInfo.EntityName + " 需要主键"); - if (navObjectNameColumnInfo.Navigat.Name2.HasValue()) + Check.ExceptionEasy(navPkColumn==null&& navObjectNameColumnInfo.Navigat.Name2==null, navEntityInfo.EntityName+ "need primarykey", navEntityInfo.EntityName + " 需要主键"); + if (navObjectNameColumnInfo.Navigat.Name2.HasValue()) { - navPkColumn = navEntityInfo.Columns.Where(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name2).FirstOrDefault(); + navPkColumn = navEntityInfo.Columns.Where(it => it.PropertyName== navObjectNameColumnInfo.Navigat.Name2).FirstOrDefault(); } - if (navPkColumn == null && navType.FullName.IsCollectionsList()) + if (navPkColumn == null && navType.FullName.IsCollectionsList()) { Check.ExceptionEasy($"{navObjectNamePropety.Name} type error ", $"一对一不能是List对象 {navObjectNamePropety.Name} "); } - List ids = null; - var isOwnsOneProperty = IsOwnsOneProperty(listItemEntity, navObjectNameColumnInfo); - if (isOwnsOneProperty) - { - var data = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name); - ids = list.Select(it => - { - if (data.ForOwnsOnePropertyInfo == null) - { - return it.GetType().GetProperty(navObjectNameColumnInfo.Navigat.Name).GetValue(it); - } - var ownsObj = data.ForOwnsOnePropertyInfo.GetValue(it); - return ownsObj.GetType().GetProperty(navObjectNameColumnInfo.Navigat.Name).GetValue(ownsObj); - }).Select(it => it == null ? "null" : it).Distinct().ToList(); - } - else - { - ids = list.Select(it => it.GetType().GetProperty(navObjectNameColumnInfo.Navigat.Name).GetValue(it)).Select(it => it == null ? "null" : it).Distinct().ToList(); - } + var ids = list.Select(it => it.GetType().GetProperty(navObjectNameColumnInfo.Navigat.Name).GetValue(it)).Select(it => it == null ? "null" : it).Distinct().ToList(); List conditionalModels = new List(); if (IsEnumNumber(navColumn)) { @@ -408,7 +387,7 @@ namespace SqlSugar } if (navPkColumn?.UnderType?.Name == UtilConstants.DateType.Name) { - ids = ids.Select(it => it == null ? null : it.ObjToDate().ToString("yyyy-MM-dd HH:mm:ss.fff")).Cast().ToList(); + ids = ids.Select(it =>it==null?null:it.ObjToDate().ToString("yyyy-MM-dd HH:mm:ss.fff") ).Cast().ToList(); } conditionalModels.Add((new ConditionalModel() { @@ -417,242 +396,47 @@ namespace SqlSugar FieldValue = String.Join(",", ids), CSharpTypeName = navPkColumn?.UnderType?.Name })); - if (OneToOneGlobalInstanceRegistry.IsAny()) - { - foreach (var item in list) - { - var firstObj = navObjectNamePropety.GetValue(item); - if (OneToOneGlobalInstanceRegistry.IsNavigationInitializerCreated(firstObj)) - { - navObjectNamePropety.SetValue(item, null); - } - } - } - if (list.Any() && navObjectNamePropety.GetValue(list.First()) == null) + if (list.Any()&&navObjectNamePropety.GetValue(list.First()) == null) { - var sqlObj = GetWhereSql(db, navObjectNameColumnInfo.Navigat.Name); + var sqlObj = GetWhereSql(db,navObjectNameColumnInfo.Navigat.Name); if (sqlObj.SelectString == null) { + //加载指定列 + var queryPropertyNames = GetQueryPropertyNames(navObjectNamePropety); + var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) - .Select(it => GetOneToOneSelectByColumnInfo(it, db)).ToList(); + .WhereIF(queryPropertyNames != null && queryPropertyNames.Length > 0, it => queryPropertyNames.Contains(it.PropertyName)) + .Select(it => GetOneToOneSelectByColumnInfo(it,db)).ToList(); sqlObj.SelectString = String.Join(",", columns); } - var navList = selector(db.Queryable().ClearFilter(QueryBuilder.RemoveFilters).Filter((navPkColumn.IsPrimarykey && navPkCount == 1) ? null : this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AS(GetDbTableName(navEntityInfo, sqlObj)) + var navList = selector(db.Queryable().ClearFilter(QueryBuilder.RemoveFilters).Filter((navPkColumn.IsPrimarykey&& navPkCount==1) ? null : this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AS(GetDbTableName(navEntityInfo,sqlObj)) .WhereIF(navObjectNameColumnInfo.Navigat.WhereSql.HasValue(), navObjectNameColumnInfo.Navigat.WhereSql) .WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString) .AddParameters(sqlObj.Parameters).Where(conditionalModels) .Select(sqlObj.SelectString)); - - if (isOwnsOneProperty) - { - { - // 有 OwnsOne 的情况 - var data = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name); - if (data.ForOwnsOnePropertyInfo == null) - { - var groupQuery = (from l in list - join n in navList - on navColumn.PropertyInfo.GetValue(l).ObjToString() - equals navPkColumn.PropertyInfo.GetValue(n).ObjToString() - select new - { - l, - n - }).ToList(); - foreach (var item in groupQuery) - { - - // var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString()); - - if (navObjectNamePropety.GetValue(item.l) == null) - { - navObjectNamePropety.SetValue(item.l, item.n); - } - else - { - //The reserved - } - - } - } - else - { - var groupQuery = (from l in list - let ownsObj = data.ForOwnsOnePropertyInfo.GetValue(l) - join n in navList - on ownsObj.GetType() - .GetProperty(navObjectNameColumnInfo.Navigat.Name) - .GetValue(ownsObj) - .ObjToString() - equals navPkColumn.PropertyInfo.GetValue(n).ObjToString() - select new - { - l, - n - }).ToList(); - - foreach (var item in groupQuery) - { - - // var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString()); - - if (navObjectNamePropety.GetValue(item.l) == null) - { - navObjectNamePropety.SetValue(item.l, item.n); - } - else - { - //The reserved - } - - } - } - } - } - else + var groupQuery = (from l in list + join n in navList + on navColumn.PropertyInfo.GetValue(l).ObjToString() + equals navPkColumn.PropertyInfo.GetValue(n).ObjToString() + select new + { + l, + n + }).ToList(); + foreach (var item in groupQuery) { - var groupQuery = (from l in list - join n in navList - on navColumn.PropertyInfo.GetValue(l).ObjToString() - equals navPkColumn.PropertyInfo.GetValue(n).ObjToString() - select new - { - l, - n - }).ToList(); - foreach (var item in groupQuery) - { - - // var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString()); - - if (navObjectNamePropety.GetValue(item.l) == null) - { - navObjectNamePropety.SetValue(item.l, item.n); - } - else - { - //The reserved - } - - } - } - } - } - private void OneToManyByArrayList(List list, Func, List> selector, EntityInfo listItemEntity, System.Reflection.PropertyInfo navObjectNamePropety, EntityColumnInfo navObjectNameColumnInfo) - { - Check.ExceptionEasy(!navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments().Any(), navObjectNamePropety?.Name + "Navigation configuration error one to many should be List", navObjectNamePropety?.Name + "导航配置错误一对多应该是List"); - - var navEntity = navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments()[0]; - var navEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(navEntity); - var childDb = this.Context; - childDb = GetCrossDatabase(childDb, navEntityInfo.Type); - childDb.InitMappingInfo(navEntityInfo.Type); - var navColumn = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name); - Check.ExceptionEasy(navColumn == null, $"{navEntityInfo.EntityName} not found {navObjectNameColumnInfo.Navigat.Name} ", $"实体 {navEntityInfo.EntityName} 未找到导航配置列 {navObjectNameColumnInfo.Navigat.Name} "); - Check.ExceptionEasy(navColumn.IsJson==false&&navColumn.IsArray==false, $"Entity {navEntityInfo.EntityName} navigation configuration errors {navObjectNameColumnInfo.Navigat.Name}, needs to array and IsJson = true or Pgsql IsArray = true ", $"实体 {navEntityInfo.EntityName} 导航配置错误 {navObjectNameColumnInfo.Navigat.Name} ,需要IsJson=true的数组或者pgsql如果是数组类型用 IsArray=true"); - //var navType = navObjectNamePropety.PropertyType; - var listItemPkColumn = navEntityInfo.Columns.Where(it => it.IsPrimarykey).FirstOrDefault(); - Check.ExceptionEasy(listItemPkColumn == null && navObjectNameColumnInfo.Navigat.Name2 == null, listItemEntity.EntityName + " not primary key", listItemEntity.EntityName + "没有主键"); - if (navObjectNameColumnInfo.Navigat.Name2.HasValue()) - { - listItemPkColumn = listItemEntity.Columns.Where(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name2).FirstOrDefault(); - Check.ExceptionEasy(listItemPkColumn == null, $"{navObjectNameColumnInfo.PropertyName} Navigate is error ", $"{navObjectNameColumnInfo.PropertyName}导航配置错误,可能顺序反了。"); - } - var ids = list.Select(it => it.GetType().GetProperty(navColumn.PropertyName).GetValue(it)).SelectMany(it => (it as IEnumerable).Cast()).Distinct().ToList(); - List conditionalModels = new List(); - if (IsEnumNumber(navColumn)) - { - ids = ids.Select(it => Convert.ToInt64(it)).Cast().ToList(); - } - if (navColumn?.UnderType?.Name == UtilConstants.StringType.Name) - { - ids = ids.Select(it => it?.ToString()?.Replace(",", "[comma]")).Cast().ToList(); - } - conditionalModels.Add((new ConditionalModel() - { - ConditionalType = ConditionalType.In, - FieldName = listItemPkColumn.DbColumnName, - FieldValue = String.Join(",", ids), - CSharpTypeName = listItemPkColumn?.UnderType?.Name - })); - var sqlObj = GetWhereSql(childDb, navObjectNameColumnInfo.Navigat.Name); - if (list.Any() && navObjectNamePropety.GetValue(list.First()) == null) - { - if (sqlObj.SelectString == null) - { - var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) - .Select(it => GetOneToManySelectByColumnInfo(it, childDb)).ToList(); - sqlObj.SelectString = String.Join(",", columns); - } - var navList = selector(childDb.Queryable(sqlObj.TableShortName).AS(GetDbTableName(navEntityInfo, sqlObj)).ClearFilter(QueryBuilder.RemoveFilters).Filter(this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).WhereIF(navObjectNameColumnInfo?.Navigat?.WhereSql != null, navObjectNameColumnInfo?.Navigat?.WhereSql).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString)); - if (navList.HasValue()) - { - var groupQuery = - (from l in list.Distinct() - from n in navList - let lValue = - listItemPkColumn.PropertyInfo.GetValue(n).ObjToString() - let nValues = - ((navColumn.PropertyInfo.GetValue(l) as IEnumerable)?.Cast()??new List()) - where nValues != null && nValues.Select(x => x.ObjToString()).Contains(lValue) - select new - { - l, - n - }) - .GroupBy(it => it.l) - .ToList(); - foreach (var item in groupQuery) - { - var itemSelectList = item.Select(it => it.n); - if (sqlObj.Skip != null) - { - itemSelectList = itemSelectList - .Skip(sqlObj.Skip.Value); - } - if (sqlObj.Take != null) - { - itemSelectList = itemSelectList - .Take(sqlObj.Take.Value); - } - if (sqlObj.MappingExpressions.HasValue()) - { - MappingFieldsHelper helper = new MappingFieldsHelper(); - helper.NavEntity = navEntityInfo; - helper.Context = this.Context; - helper.RootEntity = this.Context.EntityMaintenance.GetEntityInfo(); - helper.SetChildList(navObjectNameColumnInfo, item.Key, itemSelectList.ToList(), sqlObj.MappingExpressions); - } - else - { + // var setValue = navList.FirstOrDefault(x => navPkColumn.PropertyInfo.GetValue(x).ObjToString() == navColumn.PropertyInfo.GetValue(item).ObjToString()); - var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true); - var ilist = instance as IList; - foreach (var value in itemSelectList.ToList()) - { - ilist.Add(value); - } - navObjectNamePropety.SetValue(item.Key, instance); - } - } - foreach (var item in list) + if (navObjectNamePropety.GetValue(item.l) == null) { - if (navObjectNamePropety.GetValue(item) == null) - { - var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true); - navObjectNamePropety.SetValue(item, instance); - } + navObjectNamePropety.SetValue(item.l, item.n); } - } - else - { - //No navigation data set new List() - foreach (var item in list) + else { - var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true); - navObjectNamePropety.SetValue(item, instance); + //The reserved } + } } } @@ -699,7 +483,11 @@ namespace SqlSugar { if (sqlObj.SelectString == null) { + //加载指定列 + var queryPropertyNames = GetQueryPropertyNames(navObjectNamePropety); + var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) + .WhereIF(queryPropertyNames != null && queryPropertyNames.Length > 0, it => queryPropertyNames.Contains(it.PropertyName)) .Select(it => GetOneToManySelectByColumnInfo(it,childDb)).ToList(); sqlObj.SelectString = String.Join(",", columns); } @@ -1014,18 +802,6 @@ namespace SqlSugar { var pkInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey); result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString()); - if (ExpressionTool.ContainsTwoLevelAccess(exp)) - { - var shortName = ExpressionTool.GetParameters(exp).FirstOrDefault()?.Name; - if (shortName.HasValue()) - { - if (result.TableShortName == null) - { - result.TableShortName = shortName; - result.IsSelectNav = true; - } - } - } if (pkInfo != null) { var pkName = pkInfo.DbColumnName; @@ -1111,13 +887,6 @@ namespace SqlSugar private static void AppColumns(SqlInfo result, ISugarQueryable queryable, string columnName) { var selectPkName = queryable.SqlBuilder.GetTranslationColumnName(columnName); - if (result.IsSelectNav) - { - if (result.SelectString != null && !result.SelectString.ToLower().Contains($" {selectPkName.ToLower()} AS {selectPkName.ToLower()}")) - { - result.SelectString = result.SelectString + "," + (selectPkName + " AS " + selectPkName); - } - } if (result.SelectString!=null && !result.SelectString.ToLower().Contains(selectPkName.ToLower())) { result.SelectString = result.SelectString + "," + (selectPkName +" AS "+ selectPkName); @@ -1192,10 +961,6 @@ namespace SqlSugar navPkColumn?.UnderType?.IsEnum()==true && navPkColumn?.SqlParameterDbType == null && this.Context?.CurrentConnectionConfig?.MoreSettings?.TableEnumIsString != true; - } - private static bool IsOwnsOneProperty(EntityInfo listItemEntity, EntityColumnInfo navObjectNameColumnInfo) - { - return listItemEntity.Columns.Any(it => it.IsOwnsOne) && !listItemEntity.Type.GetProperties().Any(it => it.PropertyType.Name == navObjectNameColumnInfo.Navigat.Name); } private static bool IsJsonMapping(EntityColumnInfo navObjectNameColumnInfo, SqlInfo sqlObj) @@ -1231,10 +996,6 @@ namespace SqlSugar { return it.QuerySql + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } - if (it.ForOwnsOnePropertyInfo != null) - { - return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName); - } return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName) + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } private string GetOneToOneSelectByColumnInfo(EntityColumnInfo it,ISqlSugarClient db) @@ -1244,13 +1005,28 @@ namespace SqlSugar { return it.QuerySql + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } - if (it.ForOwnsOnePropertyInfo != null) - { - - return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName); - } return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName) + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } + /// + /// 获取查询的属性名称列表 + /// + /// + /// + private string[] GetQueryPropertyNames(System.Reflection.PropertyInfo navObjectNamePropety) + { + string[] queryPropertyNames = null; + if (navObjectNamePropety != null) + { + var navAttr = navObjectNamePropety.GetCustomAttribute(); + if (navAttr != null && navAttr.QueryPropertyNames != null && navAttr.QueryPropertyNames.Length > 0) + { + queryPropertyNames = navAttr.QueryPropertyNames; + } + } + + + return queryPropertyNames; + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs b/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs index bf6657e5f8ec945863f5ec80e06a7223a8e64b40..3461c02bdb2e95a0014b4980281f1eac57996762 100644 --- a/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs +++ b/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs @@ -243,6 +243,15 @@ namespace SqlSugar internal string BClassId { get; set; } + /// + /// 用于查询指定列 + /// + internal string[] QueryPropertyNames { get; set; } + public string[] GetQueryPropertyNames() + { + return QueryPropertyNames; + } + public string GetName() { return Name; @@ -272,36 +281,40 @@ namespace SqlSugar { return WhereSql; } - public Navigate(NavigateType navigatType,string ifSingleMasterTableColumn_IfListChildTableColumn) + public Navigate(NavigateType navigatType,string ifSingleMasterTableColumn_IfListChildTableColumn, string[] queryPropertyNames = null) { this.Name = ifSingleMasterTableColumn_IfListChildTableColumn; this.NavigatType = navigatType; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn) + public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn, string[] queryPropertyNames = null) { Check.ExceptionEasy(navigatType == NavigateType.ManyToMany, "Correct usage [Navigate(typeof(ABMapping), nameof(abmapping.aid), nameof(abmapp.bid))], incorrect usage: [Navigate(Navigate.ManyToMany, nameof(ABMapping.Aid), nameof(ABMapping.BId))]", "多对多第一个参数是Type不是NavigateType,正确用法[Navigate(typeof(ABMapping), nameof(ABMapping.Aid), nameof(ABMapping.BId))],错误用法:[Navigate(Navigate.ManyToMany, nameof(ABMapping.Aid), nameof(ABMapping.BId))]"); this.Name = ifSingleMasterTableColumn_IfListChildTableColumn; this.Name2 = ifSingleChildTableColumn_IfListMasterTableColumn; this.NavigatType = navigatType; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn, string whereSql) + public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn, string whereSql, string[] queryPropertyNames = null) { this.Name = ifSingleMasterTableColumn_IfListChildTableColumn; this.Name2 = ifSingleChildTableColumn_IfListMasterTableColumn; this.NavigatType = navigatType; this.WhereSql = whereSql; //Check.ExceptionEasy(navigatType != NavigateType.OneToOne, "Currently, only one-to-one navigation configuration Sql conditions are supported", "目前导航配置Sql条件只支持一对一"); + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(Type MappingTableType,string typeAId,string typeBId) + public Navigate(Type MappingTableType,string typeAId,string typeBId, string[] queryPropertyNames = null) { this.MappingType = MappingTableType; this.MappingAId = typeAId; this.MappingBId = typeBId; this.NavigatType = NavigateType.ManyToMany; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(Type MappingTableType, string mappingAId, string mappingBId,string aClassId,string bClassId) + public Navigate(Type MappingTableType, string mappingAId, string mappingBId,string aClassId,string bClassId, string[] queryPropertyNames = null) { this.MappingType = MappingTableType; this.MappingAId = mappingAId; @@ -309,14 +322,16 @@ namespace SqlSugar this.AClassId = aClassId; this.BClassId = bClassId; this.NavigatType = NavigateType.ManyToMany; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(Type MappingTableType, string typeAiD, string typeBId,string mappingSql) + public Navigate(Type MappingTableType, string typeAiD, string typeBId,string mappingSql, string[] queryPropertyNames = null) { this.MappingType = MappingTableType; this.MappingAId = typeAiD; this.MappingBId = typeBId; this.NavigatType = NavigateType.ManyToMany; this.WhereSql+= mappingSql; + this.QueryPropertyNames = queryPropertyNames; } }