DbContext.Database.SqlQuery <t>(查询,参数)参数,值为0,发送为&#34;默认&#34;到数据库

时间:2015-05-21 15:34:55

标签: entity-framework

我有这样的代码:

const string query = "select count(*) from query with parameters"
     + "@param1, @param2..."

(Obvioulsy是伪代码)。当我像这样运行查询时:

ctx.Database.SqlQuery<int>(query,
   new SqlParameter("param1", idAsociacion),
   new SqlParameter("param2", 0));

我得到一个例外,说明我没有为param2提供值。

如果我使用SQl服务器配置文件,我会看到生成的查询如下所示:

exec sp_executesql N'The query', @param1=N'P', @param2=default

如果我尝试直接在SQL Server中运行它,我也会收到错误,即param2是必需的而不是提供的(我不知道英语中的确切错误,因为我有一个本地化的SQL Server)。 / p>

为什么EF会将值0转换为default

1 个答案:

答案 0 :(得分:3)

问题是愚蠢的。

当我将鼠标指针放在VS中的这个构造函数调用时:

new SqlParameter("param2", 0)

我看到调用的SqlParameter重载不是这个:

SqlParameter(string, object) 

但是这个

SqlParameter(string, SqlDbType)

因此,简单的解决方案是调用构造函数将值转换为object,如下所示:

new SqlParameter("param2", (object)0)

因此调用了正确的重载,并且它按预期工作。