通过Database.SqlQuery调用存储过程时的实体框架错误

时间:2018-01-10 16:46:37

标签: entity-framework entity-framework-6

当使用int类型和值0的参数调用存储过程时,Entity Framework会向服务器发送空值。

var requiredIntParameter = new SqlParameter("RequiredInt", 0);
var tableParameter = new SqlParameter("@Table", System.Data.SqlDbType.Structured);
... table creation ....
List<ReturnType> result = DBContext.Database.SqlQuery<ReturnType>("EXEC NAMEOFSPROC "
           + "@RequiredInt, "
           + "@Table, "
           requiredIntParameter ,
           tableParameter,
           );

实体框架日志:

Opened connection at 1/10/2018 4:42:09 PM +01:00
EXEC NAMEOFSPROC @RequiredInt, @Table
-- RequiredInt: 'null' (Type = Int64, IsNullable = false)
-- @Table: '' (Type = Object, IsNullable = false)
-- Executing at 1/10/2018 4:42:09 PM +01:00
-- Completed in 40 ms with result: SqlDataReader

结果异常:

  

参数化查询&#39;(@ RequiredInt int&#39;期望参数@ RequiredInt&#39;),这是未提供的。

注意:由于Sproc有一个表参数,

((IObjectContextAdapter)this).ObjectContext.ExecuteFunction

对我来说不是一个选择!

使用:

  • EF 6.2.0
  • SQL Server 2008

1 个答案:

答案 0 :(得分:1)

有一种解决方法:

var requiredIntParameter = new SqlParameter("RequiredInt", typeof(int)); 
requiredIntParameter.Value = 0;

现在登录

EXECSPROC @RequiredInt, @Table
-- RequiredInt: '0' (Type = Int32, IsNullable = false)
-- @Table: '' (Type = Object, IsNullable = false)
-- Executing at 1/10/2018 4:42:09 PM +01:00

- 在40 ms内完成,结果为:SqlDataReader

一切都很好!