当使用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
对我来说不是一个选择!
使用:
答案 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
一切都很好!