mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 完善 ExpressionCall 方法;
This commit is contained in:
		@@ -110,13 +110,6 @@
 | 
				
			|||||||
            清空状态数据
 | 
					            清空状态数据
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
        <member name="M:FreeSql.DbSet`1.RemoveAsync(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
 | 
					 | 
				
			||||||
            <summary>
 | 
					 | 
				
			||||||
            根据 lambda 条件删除数据
 | 
					 | 
				
			||||||
            </summary>
 | 
					 | 
				
			||||||
            <param name="predicate"></param>
 | 
					 | 
				
			||||||
            <returns></returns>
 | 
					 | 
				
			||||||
        </member>
 | 
					 | 
				
			||||||
        <member name="M:FreeSql.DbSet`1.Add(`0)">
 | 
					        <member name="M:FreeSql.DbSet`1.Add(`0)">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            添加
 | 
					            添加
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ using System.ComponentModel.DataAnnotations;
 | 
				
			|||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Data.SqlClient;
 | 
					using System.Data.SqlClient;
 | 
				
			||||||
using kwlib;
 | 
					using kwlib;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Tests
 | 
					namespace FreeSql.Tests
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,9 @@
 | 
				
			|||||||
using System;
 | 
					using FreeSql.Internal;
 | 
				
			||||||
 | 
					using FreeSql.Internal.Model;
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
 | 
					using System.Linq.Expressions;
 | 
				
			||||||
using System.Text;
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.DataAnnotations
 | 
					namespace FreeSql.DataAnnotations
 | 
				
			||||||
@@ -23,6 +26,15 @@ namespace FreeSql.DataAnnotations
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public class ExpressionCallContext
 | 
					    public class ExpressionCallContext
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        internal ExpressionCallContext()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Utility = new DefaultUtility { _context = this };
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public IUtility Utility { get; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal CommonExpression _commonExp;
 | 
				
			||||||
 | 
					        internal CommonExpression.ExpTSC _tsc;
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 数据库类型,可用于适配多种数据库环境
 | 
					        /// 数据库类型,可用于适配多种数据库环境
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@@ -32,6 +44,10 @@ namespace FreeSql.DataAnnotations
 | 
				
			|||||||
        /// 已解析的表达式中参数内容
 | 
					        /// 已解析的表达式中参数内容
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public Dictionary<string, string> ParsedContent { get; } = new Dictionary<string, string>();
 | 
					        public Dictionary<string, string> ParsedContent { get; } = new Dictionary<string, string>();
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// 表达式原始值
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        public Dictionary<string, Expression> RawExpression { get; } = new Dictionary<string, Expression>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 主对象的参数化对象,可重塑其属性
 | 
					        /// 主对象的参数化对象,可重塑其属性
 | 
				
			||||||
@@ -53,5 +69,31 @@ namespace FreeSql.DataAnnotations
 | 
				
			|||||||
        /// 返回表达式函数表示的 SQL 字符串
 | 
					        /// 返回表达式函数表示的 SQL 字符串
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public string Result { get; set; }
 | 
					        public string Result { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public interface IUtility
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 获取实体元数据
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            /// <param name="entityType"></param>
 | 
				
			||||||
 | 
					            /// <returns></returns>
 | 
				
			||||||
 | 
					            TableInfo GetTableByEntity(Type entityType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            /// <summary>
 | 
				
			||||||
 | 
					            /// 解析表达式
 | 
				
			||||||
 | 
					            /// </summary>
 | 
				
			||||||
 | 
					            /// <param name="exp"></param>
 | 
				
			||||||
 | 
					            /// <returns></returns>
 | 
				
			||||||
 | 
					            string ParseExpression(Expression exp);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        class DefaultUtility : IUtility
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            internal ExpressionCallContext _context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            public TableInfo GetTableByEntity(Type entityType) => _context?._commonExp._common.GetTableByEntity(entityType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            public string ParseExpression(Expression exp) => _context?._commonExp.ExpressionLambdaToSql(exp, _context._tsc.CloneDisableDiyParse());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -219,6 +219,11 @@
 | 
				
			|||||||
            已解析的表达式中参数内容
 | 
					            已解析的表达式中参数内容
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.DataAnnotations.ExpressionCallContext.RawExpression">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            表达式原始值
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="P:FreeSql.DataAnnotations.ExpressionCallContext.DbParameter">
 | 
					        <member name="P:FreeSql.DataAnnotations.ExpressionCallContext.DbParameter">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            主对象的参数化对象,可重塑其属性
 | 
					            主对象的参数化对象,可重塑其属性
 | 
				
			||||||
@@ -240,6 +245,20 @@
 | 
				
			|||||||
            返回表达式函数表示的 SQL 字符串
 | 
					            返回表达式函数表示的 SQL 字符串
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.DataAnnotations.ExpressionCallContext.IUtility.GetTableByEntity(System.Type)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            获取实体元数据
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="entityType"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:FreeSql.DataAnnotations.ExpressionCallContext.IUtility.ParseExpression(System.Linq.Expressions.Expression)">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            解析表达式
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="exp"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="P:FreeSql.DataAnnotations.IndexAttribute.Name">
 | 
					        <member name="P:FreeSql.DataAnnotations.IndexAttribute.Name">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            索引名
 | 
					            索引名
 | 
				
			||||||
@@ -2205,6 +2224,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="P:FreeSql.IAop.ParseExpression">
 | 
					        <member name="P:FreeSql.IAop.ParseExpression">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            可自定义解析表达式
 | 
					            可自定义解析表达式
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -602,15 +602,25 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                        exp3.Method.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any()
 | 
					                        exp3.Method.GetCustomAttributes(typeof(ExpressionCallAttribute), true).Any()
 | 
				
			||||||
                        ))
 | 
					                        ))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        var ecc = new ExpressionCallContext { DataType = _ado.DataType, UserParameters = tsc.dbParams == null ? null : new List<DbParameter>(), FormatSql = obj => formatSql(obj, null, null, null) };
 | 
					                        var ecc = new ExpressionCallContext { 
 | 
				
			||||||
 | 
					                            _commonExp = this, 
 | 
				
			||||||
 | 
					                            _tsc = tsc, 
 | 
				
			||||||
 | 
					                            DataType = _ado.DataType, 
 | 
				
			||||||
 | 
					                            UserParameters = tsc.dbParams == null ? null : new List<DbParameter>(), 
 | 
				
			||||||
 | 
					                            FormatSql = obj => formatSql(obj, null, null, null) 
 | 
				
			||||||
 | 
					                        };
 | 
				
			||||||
                        var exp3MethodParams = exp3.Method.GetParameters();
 | 
					                        var exp3MethodParams = exp3.Method.GetParameters();
 | 
				
			||||||
                        var dbParamsIndex = tsc.dbParams?.Count;
 | 
					                        var dbParamsIndex = tsc.dbParams?.Count;
 | 
				
			||||||
                        ecc.ParsedContent.Add(exp3MethodParams[0].Name, exp3MethodParams[0].GetCustomAttributes(typeof(RawValueAttribute), true).Any() ? null: ExpressionLambdaToSql(exp3.Arguments[0], tsc));
 | 
					                        ecc.RawExpression.Add(exp3MethodParams[0].Name, exp3.Arguments[0]);
 | 
				
			||||||
 | 
					                        ecc.ParsedContent.Add(exp3MethodParams[0].Name, exp3MethodParams[0].GetCustomAttributes(typeof(RawValueAttribute), true).Any() ? null : ExpressionLambdaToSql(exp3.Arguments[0], tsc));
 | 
				
			||||||
                        if (tsc.dbParams?.Count > dbParamsIndex) ecc.DbParameter = tsc.dbParams.Last();
 | 
					                        if (tsc.dbParams?.Count > dbParamsIndex) ecc.DbParameter = tsc.dbParams.Last();
 | 
				
			||||||
                        List<DbParameter> oldDbParams = tsc.SetDbParamsReturnOld(null);
 | 
					                        List<DbParameter> oldDbParams = tsc.SetDbParamsReturnOld(null);
 | 
				
			||||||
                        for (var a = 1; a < exp3.Arguments.Count; a++)
 | 
					                        for (var a = 1; a < exp3.Arguments.Count; a++)
 | 
				
			||||||
                            if (exp3.Arguments[a].Type != typeof(ExpressionCallContext))
 | 
					                            if (exp3.Arguments[a].Type != typeof(ExpressionCallContext))
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                ecc.RawExpression.Add(exp3MethodParams[a].Name, exp3.Arguments[a]);
 | 
				
			||||||
                                ecc.ParsedContent.Add(exp3MethodParams[a].Name, exp3MethodParams[a].GetCustomAttributes(typeof(RawValueAttribute), true).Any() ? null : ExpressionLambdaToSql(exp3.Arguments[a], tsc));
 | 
					                                ecc.ParsedContent.Add(exp3MethodParams[a].Name, exp3MethodParams[a].GetCustomAttributes(typeof(RawValueAttribute), true).Any() ? null : ExpressionLambdaToSql(exp3.Arguments[a], tsc));
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
                        tsc.SetDbParamsReturnOld(oldDbParams);
 | 
					                        tsc.SetDbParamsReturnOld(oldDbParams);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        var exp3InvokeParams = new object[exp3.Arguments.Count];
 | 
					                        var exp3InvokeParams = new object[exp3.Arguments.Count];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,7 +78,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            cmd.Parameters.Clear();
 | 
					            cmd.Parameters.Clear();
 | 
				
			||||||
            if (isThrowException)
 | 
					            if (isThrowException)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                cmd.Dispose();
 | 
					                if (DataType == DataType.Sqlite) cmd.Dispose();
 | 
				
			||||||
                throw e;
 | 
					                throw e;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -575,7 +575,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false);
 | 
					                        LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false);
 | 
				
			||||||
                        pc.cmd.Parameters.Clear();
 | 
					                        pc.cmd.Parameters.Clear();
 | 
				
			||||||
                        pc.cmd.Dispose();
 | 
					                        if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
                        ExecuteReaderMultiple(multipleResult, connection, transaction, readerHander, cmdType, cmdText, cmdParms);
 | 
					                        ExecuteReaderMultiple(multipleResult, connection, transaction, readerHander, cmdType, cmdText, cmdParms);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -638,7 +638,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            LoggerException(pool, pc, ex, dt, logtxt);
 | 
					            LoggerException(pool, pc, ex, dt, logtxt);
 | 
				
			||||||
            pc.cmd.Parameters.Clear();
 | 
					            pc.cmd.Parameters.Clear();
 | 
				
			||||||
            pc.cmd.Dispose();
 | 
					            if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public object[][] ExecuteArray(string cmdText, object parms = null) => ExecuteArray(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
					        public object[][] ExecuteArray(string cmdText, object parms = null) => ExecuteArray(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
        public object[][] ExecuteArray(DbTransaction transaction, string cmdText, object parms = null) => ExecuteArray(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
					        public object[][] ExecuteArray(DbTransaction transaction, string cmdText, object parms = null) => ExecuteArray(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
@@ -739,7 +739,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
					            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
				
			||||||
            pc.cmd.Parameters.Clear();
 | 
					            pc.cmd.Parameters.Clear();
 | 
				
			||||||
            pc.cmd.Dispose();
 | 
					            if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
            return val;
 | 
					            return val;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public object ExecuteScalar(string cmdText, object parms = null) => ExecuteScalar(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
					        public object ExecuteScalar(string cmdText, object parms = null) => ExecuteScalar(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
@@ -775,7 +775,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
					            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
				
			||||||
            pc.cmd.Parameters.Clear();
 | 
					            pc.cmd.Parameters.Clear();
 | 
				
			||||||
            pc.cmd.Dispose();
 | 
					            if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
            return val;
 | 
					            return val;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -504,7 +504,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false);
 | 
					                        LoggerException(pool, pc, new Exception($"连接失败,准备切换其他可用服务器"), dt, logtxt, false);
 | 
				
			||||||
                        pc.cmd.Parameters.Clear();
 | 
					                        pc.cmd.Parameters.Clear();
 | 
				
			||||||
                        pc.cmd.Dispose();
 | 
					                        if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
                        await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, readerHander, cmdType, cmdText, cmdParms);
 | 
					                        await ExecuteReaderMultipleAsync(multipleResult, connection, transaction, readerHander, cmdType, cmdText, cmdParms);
 | 
				
			||||||
                        return;
 | 
					                        return;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -567,7 +567,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            LoggerException(pool, pc, ex, dt, logtxt);
 | 
					            LoggerException(pool, pc, ex, dt, logtxt);
 | 
				
			||||||
            pc.cmd.Parameters.Clear();
 | 
					            pc.cmd.Parameters.Clear();
 | 
				
			||||||
            pc.cmd.Dispose();
 | 
					            if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public Task<object[][]> ExecuteArrayAsync(string cmdText, object parms = null) => ExecuteArrayAsync(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
					        public Task<object[][]> ExecuteArrayAsync(string cmdText, object parms = null) => ExecuteArrayAsync(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
        public Task<object[][]> ExecuteArrayAsync(DbTransaction transaction, string cmdText, object parms = null) => ExecuteArrayAsync(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
					        public Task<object[][]> ExecuteArrayAsync(DbTransaction transaction, string cmdText, object parms = null) => ExecuteArrayAsync(null, transaction, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
@@ -669,7 +669,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
					            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
				
			||||||
            pc.cmd.Parameters.Clear();
 | 
					            pc.cmd.Parameters.Clear();
 | 
				
			||||||
            pc.cmd.Dispose();
 | 
					            if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
            return val;
 | 
					            return val;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public Task<object> ExecuteScalarAsync(string cmdText, object parms = null) => ExecuteScalarAsync(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
					        public Task<object> ExecuteScalarAsync(string cmdText, object parms = null) => ExecuteScalarAsync(null, null, CommandType.Text, cmdText, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
@@ -705,7 +705,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
					            LoggerException(this.MasterPool, pc, ex, dt, logtxt);
 | 
				
			||||||
            pc.cmd.Parameters.Clear();
 | 
					            pc.cmd.Parameters.Clear();
 | 
				
			||||||
            pc.cmd.Dispose();
 | 
					            if (DataType == DataType.Sqlite) pc.cmd.Dispose();
 | 
				
			||||||
            return val;
 | 
					            return val;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user