/// <summary>Gets the ObjectPropertyToParameterNameMapping[] for the given object type and procedure.</summary>
        /// <typeparam name="T">Type of object the procedure parameters are mapping to.</typeparam>
        /// <param name="procedureName">Left side of sql stored procedure [schema].[PROCEDURE_NAME].</param>
        public static ObjectPropertyToParameterNameMapping[] GetParameterMapping <T>(string procedureName)
        {
            string mappingName = $"{procedureName}].T{typeof(T).ToString()}";

            if (!_objectPropertyToParameterNameMappings.ContainsKey(mappingName))
            {
                PropertyInfo[] properties = typeof(T).GetProperties();
                Procedure      proc       = _procedures[procedureName];

                List <ObjectPropertyToParameterNameMapping> mappings = new List <ObjectPropertyToParameterNameMapping>();

                for (int idx = 0, len = properties.Length; idx != len; idx++)
                {
                    PropertyInfo property      = properties[idx];
                    string       parameterName = $"@{property.Name.ToUnderscore()}";
                    if (proc.ContainsParameter(parameterName))
                    {
                        mappings.Add(new ObjectPropertyToParameterNameMapping(parameterName, property));
                    }
                }
                _objectPropertyToParameterNameMappings.Add(mappingName, mappings.ToArray());
            }
            return(_objectPropertyToParameterNameMappings[mappingName]);
        }