/// <summary>
 ///     Filter's this route's dataset by a request parameter that is compared to the primary key of the model
 /// </summary>
 /// <typeparam name="TModel">The model type that the API is being built for</typeparam>
 /// <typeparam name="TUser">The type of authenticated user context</typeparam>
 /// <param name="builder">The options builder to perform the operation on</param>
 /// <param name="parameters">The parameters to filter by</param>
 /// <returns>This <see cref="SeltzrOptionsBuilder{TModel, TUser}" /> object, for chaining</returns>
 public static SeltzrOptionsBuilder <TModel, TUser> FilterByPrimaryKey <TModel, TUser>(
     this SeltzrOptionsBuilder <TModel, TUser> builder,
     params ParameterRetriever[] parameters)
     where TModel : class where TUser : class
 {
     return(builder.AddFilter(new PrimaryKeyFilter <TModel>(SeltzrOrmOptionsBuilderExtensions.GetPrimaryKey(builder), parameters)));
 }
 /// <summary>
 ///     Ensures that the primary key of the <typeparamref name="TModel" /> will be included in the response body
 /// </summary>
 /// <typeparam name="TModel">The model type that the API is being built for</typeparam>
 /// <typeparam name="TUser">The type of authenticated user context</typeparam>
 /// <param name="builder">The options builder to perform the operation on</param>
 /// <returns>This <see cref="SeltzrOptionsBuilder{TModel, TUser}" /> object, for chaining</returns>
 public static SeltzrOptionsBuilder <TModel, TUser> IncludePrimaryKey <TModel, TUser>(
     this SeltzrOptionsBuilder <TModel, TUser> builder)
     where TModel : class where TUser : class
 {
     foreach (KeyProperty Property in SeltzrOrmOptionsBuilderExtensions.GetPrimaryKey(builder))
     {
         builder.Include(Property.PropertyInfo);
     }
     return(builder);
 }
        /// <summary>
        ///		Gets camelCased versions of the names of the primary key properties
        /// </summary>
        /// <typeparam name="TModel">The model type that the API is being built for</typeparam>
        /// <typeparam name="TUser">The type of authenticated user context</typeparam>
        /// <param name="builder">The builder containing the type of database context to get the keys for</param>
        /// <returns>camelCased versions of the primary key property names, in order</returns>
        private static string[] GetKeyNames <TModel, TUser>(SeltzrOptionsBuilder <TModel, TUser> builder)
            where TModel : class where TUser : class
        {
            List <KeyProperty> KeyProperties = SeltzrOrmOptionsBuilderExtensions.GetPrimaryKey(builder);

            IEnumerable <string> Names =
                KeyProperties.Select(p => SeltzrOrmOptionsBuilderExtensions.CamelCase(p.Name));

            return(Names.ToArray());
        }