mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 优化 IncludeMany 扩展方法对 T1 不自动迁移;
This commit is contained in:
		@@ -220,6 +220,12 @@ public static partial class FreeSqlGlobalExtensions
 | 
				
			|||||||
    public static List<T1> IncludeMany<T1, TNavigate>(this List<T1> list, IFreeSql orm, Expression<Func<T1, IEnumerable<TNavigate>>> navigateSelector, Action<ISelect<TNavigate>> then = null) where T1 : class where TNavigate : class
 | 
					    public static List<T1> IncludeMany<T1, TNavigate>(this List<T1> list, IFreeSql orm, Expression<Func<T1, IEnumerable<TNavigate>>> navigateSelector, Action<ISelect<TNavigate>> then = null) where T1 : class where TNavigate : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (list == null || list.Any() == false) return list;
 | 
					        if (list == null || list.Any() == false) return list;
 | 
				
			||||||
 | 
					        if (orm.CodeFirst.IsAutoSyncStructure)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var tb = orm.CodeFirst.GetTableByEntity(typeof(T1));
 | 
				
			||||||
 | 
					            if (tb == null || tb.Primarys.Any() == false)
 | 
				
			||||||
 | 
					                (orm.CodeFirst as FreeSql.Internal.CommonProvider.CodeFirstProvider)._dicSycedTryAdd(typeof(T1)); //._dicSyced.TryAdd(typeof(TReturn), true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        var select = orm.Select<T1>().IncludeMany(navigateSelector, then) as FreeSql.Internal.CommonProvider.Select1Provider<T1>;
 | 
					        var select = orm.Select<T1>().IncludeMany(navigateSelector, then) as FreeSql.Internal.CommonProvider.Select1Provider<T1>;
 | 
				
			||||||
        select.SetList(list);
 | 
					        select.SetList(list);
 | 
				
			||||||
        return list;
 | 
					        return list;
 | 
				
			||||||
@@ -230,6 +236,12 @@ public static partial class FreeSqlGlobalExtensions
 | 
				
			|||||||
    async public static System.Threading.Tasks.Task<List<T1>> IncludeManyAsync<T1, TNavigate>(this List<T1> list, IFreeSql orm, Expression<Func<T1, IEnumerable<TNavigate>>> navigateSelector, Action<ISelect<TNavigate>> then = null) where T1 : class where TNavigate : class
 | 
					    async public static System.Threading.Tasks.Task<List<T1>> IncludeManyAsync<T1, TNavigate>(this List<T1> list, IFreeSql orm, Expression<Func<T1, IEnumerable<TNavigate>>> navigateSelector, Action<ISelect<TNavigate>> then = null) where T1 : class where TNavigate : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (list == null || list.Any() == false) return list;
 | 
					        if (list == null || list.Any() == false) return list;
 | 
				
			||||||
 | 
					        if (orm.CodeFirst.IsAutoSyncStructure)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var tb = orm.CodeFirst.GetTableByEntity(typeof(T1));
 | 
				
			||||||
 | 
					            if (tb == null || tb.Primarys.Any() == false)
 | 
				
			||||||
 | 
					                (orm.CodeFirst as FreeSql.Internal.CommonProvider.CodeFirstProvider)._dicSycedTryAdd(typeof(T1)); //._dicSyced.TryAdd(typeof(TReturn), true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        var select = orm.Select<T1>().IncludeMany(navigateSelector, then) as FreeSql.Internal.CommonProvider.Select1Provider<T1>;
 | 
					        var select = orm.Select<T1>().IncludeMany(navigateSelector, then) as FreeSql.Internal.CommonProvider.Select1Provider<T1>;
 | 
				
			||||||
        await select.SetListAsync(list);
 | 
					        await select.SetListAsync(list);
 | 
				
			||||||
        return list;
 | 
					        return list;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2260,6 +2260,137 @@
 | 
				
			|||||||
            <param name="parms"></param>
 | 
					            <param name="parms"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="readerHander"></param>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T1"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdType"></param>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="cmdParms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 })
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <typeparam name="T1"></typeparam>
 | 
				
			||||||
 | 
					            <param name="cmdText"></param>
 | 
				
			||||||
 | 
					            <param name="parms"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="E:FreeSql.IAop.ParseExpression">
 | 
					        <member name="E:FreeSql.IAop.ParseExpression">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            可自定义解析表达式
 | 
					            可自定义解析表达式
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -183,7 +183,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            if (typeof(TReturn) == typeof(T1)) return this as ISelect<TReturn>;
 | 
					            if (typeof(TReturn) == typeof(T1)) return this as ISelect<TReturn>;
 | 
				
			||||||
            _tables[0].Parameter = select.Parameters[0];
 | 
					            _tables[0].Parameter = select.Parameters[0];
 | 
				
			||||||
            _selectExpression = select.Body;
 | 
					            _selectExpression = select.Body;
 | 
				
			||||||
            (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TReturn)); //._dicSyced.TryAdd(typeof(TReturn), true);
 | 
					            if (_orm.CodeFirst.IsAutoSyncStructure)
 | 
				
			||||||
 | 
					                (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TReturn)); //._dicSyced.TryAdd(typeof(TReturn), true);
 | 
				
			||||||
            var ret = _orm.Select<TReturn>();
 | 
					            var ret = _orm.Select<TReturn>();
 | 
				
			||||||
            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
					            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
@@ -198,7 +199,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            ), SelectTableInfoType.InnerJoin);
 | 
					            ), SelectTableInfoType.InnerJoin);
 | 
				
			||||||
            if (typeof(TResult) == typeof(T1)) return this as ISelect<TResult>;
 | 
					            if (typeof(TResult) == typeof(T1)) return this as ISelect<TResult>;
 | 
				
			||||||
            _selectExpression = resultSelector.Body;
 | 
					            _selectExpression = resultSelector.Body;
 | 
				
			||||||
            (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TResult)); //._dicSyced.TryAdd(typeof(TResult), true);
 | 
					            if (_orm.CodeFirst.IsAutoSyncStructure)
 | 
				
			||||||
 | 
					                (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TResult)); //._dicSyced.TryAdd(typeof(TResult), true);
 | 
				
			||||||
            var ret = _orm.Select<TResult>() as Select1Provider<TResult>;
 | 
					            var ret = _orm.Select<TResult>() as Select1Provider<TResult>;
 | 
				
			||||||
            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
					            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
@@ -213,7 +215,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            ), SelectTableInfoType.InnerJoin);
 | 
					            ), SelectTableInfoType.InnerJoin);
 | 
				
			||||||
            if (typeof(TResult) == typeof(T1)) return this as ISelect<TResult>;
 | 
					            if (typeof(TResult) == typeof(T1)) return this as ISelect<TResult>;
 | 
				
			||||||
            _selectExpression = resultSelector.Body;
 | 
					            _selectExpression = resultSelector.Body;
 | 
				
			||||||
            (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TResult)); //._dicSyced.TryAdd(typeof(TResult), true);
 | 
					            if (_orm.CodeFirst.IsAutoSyncStructure)
 | 
				
			||||||
 | 
					                (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TResult)); //._dicSyced.TryAdd(typeof(TResult), true);
 | 
				
			||||||
            var ret = _orm.Select<TResult>() as Select1Provider<TResult>;
 | 
					            var ret = _orm.Select<TResult>() as Select1Provider<TResult>;
 | 
				
			||||||
            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
					            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
@@ -245,7 +248,8 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            if (typeof(TResult) == typeof(T1)) return this as ISelect<TResult>;
 | 
					            if (typeof(TResult) == typeof(T1)) return this as ISelect<TResult>;
 | 
				
			||||||
            _selectExpression = resultSelector.Body;
 | 
					            _selectExpression = resultSelector.Body;
 | 
				
			||||||
            (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TResult)); //._dicSyced.TryAdd(typeof(TResult), true);
 | 
					            if (_orm.CodeFirst.IsAutoSyncStructure)
 | 
				
			||||||
 | 
					                (_orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(typeof(TResult)); //._dicSyced.TryAdd(typeof(TResult), true);
 | 
				
			||||||
            var ret = _orm.Select<TResult>() as Select1Provider<TResult>;
 | 
					            var ret = _orm.Select<TResult>() as Select1Provider<TResult>;
 | 
				
			||||||
            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
					            Select0Provider<ISelect<T1>, T1>.CopyData(this, ret, null);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user