diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index f04dc599..99debfaf 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -220,6 +220,12 @@ public static partial class FreeSqlGlobalExtensions public static List IncludeMany(this List list, IFreeSql orm, Expression>> navigateSelector, Action> then = null) where T1 : class where TNavigate : class { 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().IncludeMany(navigateSelector, then) as FreeSql.Internal.CommonProvider.Select1Provider; select.SetList(list); return list; @@ -230,6 +236,12 @@ public static partial class FreeSqlGlobalExtensions async public static System.Threading.Tasks.Task> IncludeManyAsync(this List list, IFreeSql orm, Expression>> navigateSelector, Action> then = null) where T1 : class where TNavigate : class { 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().IncludeMany(navigateSelector, then) as FreeSql.Internal.CommonProvider.Select1Provider; await select.SetListAsync(list); return list; diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 784479be..08d2c1b3 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2260,6 +2260,137 @@ + + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 + + + + + + + + + 查询,ExecuteReaderAsync(dr => {}, "select * from user where age > ?age", new { age = 25 }) + + + + + + + 查询 + + + + + + + 查询,ExecuteArrayAsync("select * from user where age > ?age", new { age = 25 }) + + + + + + + + 查询 + + + + + + + 查询,ExecuteDataSetAsync("select * from user where age > ?age; select 2", new { age = 25 }) + + + + + + + + 查询 + + + + + + + 查询,ExecuteDataTableAsync("select * from user where age > ?age", new { age = 25 }) + + + + + + + + 在【主库】执行 + + + + + + + + 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > ?age", new { age = 25 }) + + + + + + + + 在【主库】执行 + + + + + + + + 在【主库】执行,ExecuteScalarAsync("select 1 from user where age > ?age", new { age = 25 }) + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + 执行SQL返回对象集合,QueryAsync<User>("select * from user where age > ?age", new { age = 25 }) + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 }) + + + + + + + + + + 执行SQL返回对象集合,Query<User>("select * from user where age > ?age; select * from address", new { age = 25 }) + + + + + + 可自定义解析表达式 diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs index fa3287cc..54adc140 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select1Provider.cs @@ -183,7 +183,8 @@ namespace FreeSql.Internal.CommonProvider if (typeof(TReturn) == typeof(T1)) return this as ISelect; _tables[0].Parameter = select.Parameters[0]; _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(); Select0Provider, T1>.CopyData(this, ret, null); return ret; @@ -198,7 +199,8 @@ namespace FreeSql.Internal.CommonProvider ), SelectTableInfoType.InnerJoin); if (typeof(TResult) == typeof(T1)) return this as ISelect; _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() as Select1Provider; Select0Provider, T1>.CopyData(this, ret, null); return ret; @@ -213,7 +215,8 @@ namespace FreeSql.Internal.CommonProvider ), SelectTableInfoType.InnerJoin); if (typeof(TResult) == typeof(T1)) return this as ISelect; _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() as Select1Provider; Select0Provider, T1>.CopyData(this, ret, null); return ret; @@ -245,7 +248,8 @@ namespace FreeSql.Internal.CommonProvider } if (typeof(TResult) == typeof(T1)) return this as ISelect; _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() as Select1Provider; Select0Provider, T1>.CopyData(this, ret, null); return ret;