Construtor SqlParameter, cuidado …

Problema

Eu estava usando a estrutura de entidade para chamar um procedimento armazenado do código.

SqlParameter param1 = new    SqlParameter("@onlinestatus", true);

SqlParameter param2 = new SqlParameter("@userid", 21425);

SqlParameter param3 = new SqlParameter("@onlineid", 0);

db
.Database.SqlQuery<online_stats>("online_stats @onlinestatus, @userid, @onlineid", param1, param2, param3);

Mas continuava recebendo o erro abaixo:

An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.SqlServer.dll but was not handled in user code

Additional information: The parameterized query '(@onlinestatus bit,@userid int,@onlineid int)online_stats @onlin' expects the parameter '@onlineid', which was not supplied.

Razão?????????

SqlParameter tem cerca de 7 construtores.
Dois dos quais estavam criando problemas para mim.

1. SqlParameter(string parametername, Object value)

2. SqlParameter(string parametername, SqlDbType dbtype)

Embora eu pretendesse usar o primeiro construtor especificando o nome e o valor do meu parâmetro, o valor ‘0’ do parâmetro estava sendo tratado como valor de SqlDbType (pois é um enum) . & continuei recebendo o erro acima.

Não tive problemas com os dois primeiros parâmetros, pois eles têm os seguintes valores

@onlinestatus = true & @userid = 21425(which is biig number.)

Eu teria o mesmo problema com @userid, se o valor fosse menor que 25.

Solução:

O próprio erro acima é um pouco confuso. De qualquer forma, a solução para isso era usar um construtor diferente ou especificar o valor para o parâmetro separadamente.

param3.Value = 0;