【发布时间】:2018-01-10 16:46:36
【问题描述】:
当使用 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
产生的异常:
参数化查询 '(@RequiredInt int' 需要参数 @RequiredInt'),但未提供。
注意:由于 Sproc 有一个表参数,
((IObjectContextAdapter)this).ObjectContext.ExecuteFunction
不适合我!
使用:
- EF 6.2.0
- SQL Server 2008
【问题讨论】:
-
在RequiredInt 参数之前好像缺少@。
-
该错误并不意味着传递了一个空值,它意味着调用批处理完全省略了该参数。请附上完整的复制品。 stackoverflow.com/help/mcve
-
我认为日志中已经很清楚发送到服务器的内容了
-
省略此参数:var requiredIntParameter = new SqlParameter("RequiredInt", typeof(int));
-
这个参数在sprocc调用中导致null:var requiredIntParameter = new SqlParameter("RequiredInt", 0);
标签: entity-framework entity-framework-6