/// <summary>
        /// Applies the value and options of an action parameter to the underlying implementation.
        /// </summary>
        /// <param name="param"></param>
        public void ApplyParameter(PersistenceParameter param)
        {
            // Keep a copy for later reference
            param = param.Clone();

            // ...............................
            // Check for parameter conflicts
            if (_appliedParameters == null)
            {
                _appliedParameters = new Dictionary <string, PersistenceParameter>();
            }
            else
            {
                PersistenceParameter existing;
                if (_appliedParameters.TryGetValue(param.Name, out existing) && existing.Options != null)
                {
                    if (param.Options == null)
                    {
                        if (existing.Options != null)
                        {
                            param.Options = existing.Options.Clone();
                        }
                    }
                    else if (!Object.Equals(existing.Options, param.Options))
                    {
                        throw new QueryTemplateException(String.Format("Persistence parameter conflict: '{0}' is declared more than once but with different options.", param.Name));
                    }
                }
            }

            _appliedParameters[param.Name] = param;
            OnApplyParameter(param);
        }
 protected abstract void OnApplyParameter(PersistenceParameter param);