protected LuaSqlPolicyExecutorInfo RunLua(IDictionary <string, object> parameters, ConfigSqlExecuteType exeType, IDictionary <string, ISqlConfigPolicy> policies) { var info = new LuaSqlPolicyExecutorInfo() { Config = _sqlConfigMgr.Config, DB = DB, SqlInfo = _sqlInfo, SqlName = SqlName, TableInfo = _tableInfo, TableName = TableName, ExecuteType = exeType, PreSqlParams = parameters, }; //lua sql执行前的调用 _sqlConfigMgr.PolicyMgr.InvokePreExecutePolicyExecutors(policies, info); var guid = Guid.NewGuid().ToString(); _luaSqlParamFuncContainer[guid] = info.LuaSqlParamFuncs; //设置SqlParams操作相关的函数到容器中 //调用脚本函数生成sql var srtn = _sqlConfigMgr.Config.Run(TableName, SqlName, guid); _luaSqlParamFuncContainer.Remove(guid); //脚本运行完成后移除 CheckSqlExecuteType(srtn.Type, exeType); info.LuaRan?.Invoke(); //触发lua运行之后的事件 info.Sql = srtn.Sql.Trim(); //sql, 去掉头尾空格 info.SqlParams = _sqlParamCvt.DictionaryToDBParams(DB, info.PreSqlParams); return(info); }
/// <summary> /// 将sql的参数模型对象 转换成 sql的参数 /// </summary> /// <param name="db"></param> /// <param name="paramsModel">sql的参数模型对象</param> /// <param name="ignoreProptNames">sql的参数模型对象中需要忽略的属性名</param> /// <returns></returns> public static IDataParameter[] ObjectToDBParams(this ISqlParamConverter sqlParamCvt, DbContext db, object paramsModel, IEnumerable <string> ignoreProptNames = null) { if (paramsModel != null) { return(sqlParamCvt.DictionaryToDBParams(db, EFHelper.Services.ObjReflector.GetPublicInstanceProptValues(paramsModel, ignoreProptNames))); } else { return(new IDataParameter[0]); } }
/// <summary> /// 将Dictionary => IDataParameter[] ( SqlParameters) /// </summary> /// <param name="sqlParamCvt"></param> /// <param name="db"></param> /// <param name="dictParams"></param> /// <returns></returns> public static IDataParameter[] DictionaryToDBParamsR(this ISqlParamConverter sqlParamCvt, DbContext db, IReadOnlyDictionary <string, object> dictParams) { return(sqlParamCvt.DictionaryToDBParams(db, dictParams, dictParams?.Count)); }