GenerateExecuteParameters ( string connectionString , string storeProcedureName , JToken inputsParameters , bool includeReturnValueParameter = true ) { List <TDbParameter> result = null; var dbParameters = GetCachedParameters ( connectionString , storeProcedureName , includeReturnValueParameter ); var jProperties = (JObject)inputsParameters; foreach (KeyValuePair <string, JToken> jProperty in jProperties) { DbParameter dbParameter = null; if ( dbParameters .TryGetValue ( jProperty.Key , out dbParameter ) ) { var direction = dbParameter .Direction; var dbParameterValue = dbParameter.Value; var includeValueClone = false; if ( dbParameterValue != DBNull.Value && dbParameterValue != null ) { DataTable dataTable = dbParameterValue as DataTable; if (dataTable != null) { includeValueClone = true; } } var cloneDbParameter = dbParameter .ShallowClone <TDbParameter> ( OnExecutingSetDbParameterTypeProcess , includeValueClone ); var parameterValue = OnExecutingSetDbParameterValueProcess ( cloneDbParameter , jProperty.Value ); cloneDbParameter.Value = parameterValue; if (result == null) { result = new List <TDbParameter>(); } result .Add(cloneDbParameter); } } foreach (var kvp in dbParameters) { var dbParameter = kvp.Value; if (result == null) { result = new List <TDbParameter>(); } if ( !result .Exists ( (x) => { return ( string .Compare ( x.ParameterName , dbParameter .ParameterName , true ) == 0 ); } ) ) { var direction = dbParameter.Direction; if ( direction != ParameterDirection.Input ) { if (result == null) { result = new List <TDbParameter>(); } var cloneDbParameter = dbParameter .ShallowClone <TDbParameter> ( OnExecutingSetDbParameterTypeProcess ); //if (direction == ParameterDirection.InputOutput) //{ // cloneDbParameter.Direction = ParameterDirection.Output; //} result.Add(cloneDbParameter); } } } return(result); }