mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-17 19:43:21 +08:00
- 修复 多表子查询参数化共享问题;
This commit is contained in:
parent
ba8c34fa3c
commit
4ac861e0d6
@ -305,6 +305,7 @@ namespace base_entity
|
|||||||
public int id { get; set; }
|
public int id { get; set; }
|
||||||
public int parentid { get; set; }
|
public int parentid { get; set; }
|
||||||
public string code { get; set; }
|
public string code { get; set; }
|
||||||
|
public ActivityStatusCode status { get; set; }
|
||||||
|
|
||||||
[Navigate(nameof(parentid))]
|
[Navigate(nameof(parentid))]
|
||||||
public TreeModel Parent { get; set; }
|
public TreeModel Parent { get; set; }
|
||||||
@ -544,7 +545,7 @@ namespace base_entity
|
|||||||
|
|
||||||
#region 初始化 IFreeSql
|
#region 初始化 IFreeSql
|
||||||
var fsql = new FreeSql.FreeSqlBuilder()
|
var fsql = new FreeSql.FreeSqlBuilder()
|
||||||
.UseAutoSyncStructure(false)
|
.UseAutoSyncStructure(true)
|
||||||
.UseNoneCommandParameter(true)
|
.UseNoneCommandParameter(true)
|
||||||
.UseNameConvert(NameConvertType.ToLower)
|
.UseNameConvert(NameConvertType.ToLower)
|
||||||
//.UseMappingPriority(MappingPriorityType.Attribute, MappingPriorityType.FluentApi, MappingPriorityType.Aop)
|
//.UseMappingPriority(MappingPriorityType.Attribute, MappingPriorityType.FluentApi, MappingPriorityType.Aop)
|
||||||
@ -600,6 +601,9 @@ namespace base_entity
|
|||||||
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
//fsql.CodeFirst.IsGenerateCommandParameterWithLambda = true;
|
||||||
|
//var TreeModel01 = fsql.Select<TreeModel>().Where(a => a.code == "x" && a.Childs.AsSelect().Any(b => b.id == a.id && b.status == ActivityStatusCode.Error)).ToList();
|
||||||
|
|
||||||
var v1 = 123123123;
|
var v1 = 123123123;
|
||||||
var mysql0111 = fsql.Select<User1>().Where(a => a.Nickname.Contains(v1.ToString())).ToSql();
|
var mysql0111 = fsql.Select<User1>().Where(a => a.Nickname.Contains(v1.ToString())).ToSql();
|
||||||
var mysql0112 = fsql.Select<User1>().Where(a => a.Nickname.Contains(123123123.ToString())).ToSql();
|
var mysql0112 = fsql.Select<User1>().Where(a => a.Nickname.Contains(123123123.ToString())).ToSql();
|
||||||
|
@ -1104,82 +1104,6 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="T:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder">
|
|
||||||
<summary>
|
|
||||||
动态创建实体类型
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.#ctor(IFreeSql,System.String,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置Class
|
|
||||||
</summary>
|
|
||||||
<param name="className">类名</param>
|
|
||||||
<param name="attributes">类标记的特性[Table(Name = "xxx")] [Index(xxxx)]</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置属性
|
|
||||||
</summary>
|
|
||||||
<param name="propertyName">属性名称</param>
|
|
||||||
<param name="propertyType">属性类型</param>
|
|
||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置属性
|
|
||||||
</summary>
|
|
||||||
<param name="propertyName">属性名称</param>
|
|
||||||
<param name="propertyType">属性类型</param>
|
|
||||||
<param name="isOverride">该属性是否重写父类属性</param>
|
|
||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Property(System.String,System.Type,System.Boolean,System.Object,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
配置属性
|
|
||||||
</summary>
|
|
||||||
<param name="propertyName">属性名称</param>
|
|
||||||
<param name="propertyType">属性类型</param>
|
|
||||||
<param name="isOverride">该属性是否重写父类属性</param>
|
|
||||||
<param name="defaultValue">属性默认值</param>
|
|
||||||
<param name="attributes">属性标记的特性-支持多个</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Extend(System.Type)">
|
|
||||||
<summary>
|
|
||||||
配置父类
|
|
||||||
</summary>
|
|
||||||
<param name="superClass">父类类型</param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.OverrideProperty(System.Reflection.Emit.TypeBuilder@,System.Reflection.Emit.MethodBuilder,FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.PropertyMethodEnum,System.String)">
|
|
||||||
<summary>
|
|
||||||
Override属性
|
|
||||||
</summary>
|
|
||||||
<param name="typeBuilder"></param>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.Build">
|
|
||||||
<summary>
|
|
||||||
Emit动态创建出Class - Type
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToLower(System.String)">
|
|
||||||
<summary>
|
|
||||||
首字母小写
|
|
||||||
</summary>
|
|
||||||
<param name="input"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.DynamicEntity.DynamicCompileBuilder.FirstCharToUpper(System.String)">
|
|
||||||
<summary>
|
|
||||||
首字母大写
|
|
||||||
</summary>
|
|
||||||
<param name="input"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
|
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
|
获取实体的主键值,以 "*|_,[,_|*" 分割,当任意一个主键属性无值时,返回 null
|
||||||
@ -5863,28 +5787,6 @@
|
|||||||
请使用 fsql.InsertDict(dict) 方法插入字典数据
|
请使用 fsql.InsertDict(dict) 方法插入字典数据
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.DynamicEntity(FreeSql.ICodeFirst,System.String,System.Attribute[])">
|
|
||||||
<summary>
|
|
||||||
动态构建Class Type
|
|
||||||
</summary>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateInstance(FreeSql.Internal.Model.TableInfo,System.Collections.Generic.Dictionary{System.String,System.Object})">
|
|
||||||
<summary>
|
|
||||||
根据字典,创建 table 对应的实体对象
|
|
||||||
</summary>
|
|
||||||
<param name="table"></param>
|
|
||||||
<param name="dict"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlGlobalDynamicEntityExtensions.CreateDictionary(FreeSql.Internal.Model.TableInfo,System.Object)">
|
|
||||||
<summary>
|
|
||||||
根据实体对象,创建 table 对应的字典
|
|
||||||
</summary>
|
|
||||||
<param name="table"></param>
|
|
||||||
<param name="instance"></param>
|
|
||||||
<returns></returns>
|
|
||||||
</member>
|
|
||||||
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
|
<member name="M:FreeSqlGlobalExpressionCallExtensions.Between(System.DateTime,System.DateTime,System.DateTime)">
|
||||||
<summary>
|
<summary>
|
||||||
C#: that >= between && that <= and<para></para>
|
C#: that >= between && that <= and<para></para>
|
||||||
|
@ -978,7 +978,7 @@ namespace FreeSql.Internal
|
|||||||
_common._orm.Aop.ParseExpressionHandler(this, args);
|
_common._orm.Aop.ParseExpressionHandler(this, args);
|
||||||
if (string.IsNullOrEmpty(args.Result) == false) return args.Result;
|
if (string.IsNullOrEmpty(args.Result) == false) return args.Result;
|
||||||
}
|
}
|
||||||
ParseExpressionNoAsSelect(this, args, tsc._tableRule, tsc.whereGlobalFilter);
|
ParseExpressionNoAsSelect(this, args, tsc._tableRule, tsc.whereGlobalFilter, tsc.dbParams);
|
||||||
if (string.IsNullOrEmpty(args.Result) == false) return args.Result;
|
if (string.IsNullOrEmpty(args.Result) == false) return args.Result;
|
||||||
}
|
}
|
||||||
switch (exp.NodeType)
|
switch (exp.NodeType)
|
||||||
@ -2611,7 +2611,7 @@ namespace FreeSql.Internal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ParseExpressionNoAsSelect(object sender, Aop.ParseExpressionEventArgs e, Func<Type, string, string> tableRule, List<GlobalFilter.Item> whereGlobalFilter)
|
public static void ParseExpressionNoAsSelect(object sender, Aop.ParseExpressionEventArgs e, Func<Type, string, string> tableRule, List<GlobalFilter.Item> whereGlobalFilter, List<DbParameter> dbParams)
|
||||||
{
|
{
|
||||||
if (e.Expression.NodeType != ExpressionType.Call &&
|
if (e.Expression.NodeType != ExpressionType.Call &&
|
||||||
(e.Expression as MemberExpression)?.Member.Name != "Count") return;
|
(e.Expression as MemberExpression)?.Member.Name != "Count") return;
|
||||||
@ -2689,6 +2689,7 @@ namespace FreeSql.Internal
|
|||||||
var mtmReftbname = e.FreeParse(Expression.MakeMemberAccess(memberExp.Expression, exp3Tb.Properties[exp3Tb.ColumnsByPosition[0].CsName]));
|
var mtmReftbname = e.FreeParse(Expression.MakeMemberAccess(memberExp.Expression, exp3Tb.Properties[exp3Tb.ColumnsByPosition[0].CsName]));
|
||||||
mtmReftbname = mtmReftbname.Substring(0, mtmReftbname.Length - commonExp._common.QuoteSqlName(exp3Tb.ColumnsByPosition[0].Attribute.Name).Length - 1);
|
mtmReftbname = mtmReftbname.Substring(0, mtmReftbname.Length - commonExp._common.QuoteSqlName(exp3Tb.ColumnsByPosition[0].Attribute.Name).Length - 1);
|
||||||
var midSelect = commonExp._common._orm.Select<object>().As($"M{select._tables[0].Alias}_M{mtmReftbname}").AsType(memberTbref.RefMiddleEntityType) as Select1Provider<object>;
|
var midSelect = commonExp._common._orm.Select<object>().As($"M{select._tables[0].Alias}_M{mtmReftbname}").AsType(memberTbref.RefMiddleEntityType) as Select1Provider<object>;
|
||||||
|
if (dbParams != null) midSelect.WithParameters(dbParams);
|
||||||
if (tableRule != null) midSelect._tableRules.Add(tableRule);
|
if (tableRule != null) midSelect._tableRules.Add(tableRule);
|
||||||
if (whereGlobalFilter != null)
|
if (whereGlobalFilter != null)
|
||||||
{
|
{
|
||||||
@ -2752,7 +2753,8 @@ namespace FreeSql.Internal
|
|||||||
Type = SelectTableInfoType.Parent,
|
Type = SelectTableInfoType.Parent,
|
||||||
Parameter = a.Parameter
|
Parameter = a.Parameter
|
||||||
}));
|
}));
|
||||||
if (tableRule != null) select._tableRules.Add(tableRule);
|
if (dbParams != null) select.WithParameters(dbParams);
|
||||||
|
if (tableRule != null) select._tableRules.Add(tableRule);
|
||||||
if (whereGlobalFilter != null)
|
if (whereGlobalFilter != null)
|
||||||
{
|
{
|
||||||
select._whereGlobalFilter.Clear();
|
select._whereGlobalFilter.Clear();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user