Por que o Entity Framework lança uma exceção ao alterar a ordem SqlParameter?

Estou usando o código da estrutura de entidade 4.3 primeiro para chamar o procedimento armazenado da maneira que eu chamo o procedimento armazenado é assim:

var parameters = new[]
{
    new SqlParameter("member", 1),
    **new SqlParameter("Code","0165210662660001"),**
    new SqlParameter("PageSize", 1),
    new SqlParameter("PageNumber",1)
};

var result  = context.Database.SqlQuery<resultClass>(
    "mySpName @member, @Code, @PageSize,@PageNumber" parameters).ToList();

Ele é executado no SqlServer e eu obtenho o resultado.

Mas se eu mudar a ordem dos parâmetros como este:

var result  = context.Database.SqlQuery<resultClass>("mySpName @Code,  @member,@PageSize,@PageNumber" parameters).ToList();

var parameters = new[]
{
    **new SqlParameter("Code","0165210662660001"),**
    new SqlParameter("Member", 1),
    new SqlParameter("PageSize", 1),
    new SqlParameter("PageNumber",1)
};

Eu tenho um erro como este:

 Error converting data type nvarchar to int

O procedimento armazenado é assim:

ALTER PROCEDURE [c].[mySpName]
    @Member INT ,
    @Code VARCHAR (50) ,
    @PageSize INT ,
    @PageNumber INT
 AS 

Por que recebo este pedido? É importante manter a ordem dos parâmetros? O que posso fazer para chamar um procedimento armazenado sem me preocupar com a ordem dos parâmetros?

============ eu acho uma solução e funciona perfeitamente ============

public class blahContext<T>
{
    int i = 0;
    public  IEnumerable<T> ExecuteStoreQuery(string SPname, SqlParameter[] parameters)
    {

        using (var context = new CADAContext())
        {


            string para = string.Join(", ", (from p in parameters
                                             where !"NULL".Equals(p.Value)
                                             select string.Concat(new object[] { "@", p.ParameterName, "={", this.i++, "}" })).ToList<string>());

            object[] x = (from p in parameters
                          where !"NULL".Equals(p.Value)
                          select p.Value).ToArray<object>();

            return context.Database.SqlQuery<T>(SPname + " " + para, x).ToList();

        }
    }

questionAnswers(1)

yourAnswerToTheQuestion