Reputation: 41
When invoking a stored procedure with a parameter of type int and value 0, Entity Framework sends a null value to the server.
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,
);
Entity Framework log:
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
Resulting exception:
The parameterized query '(@RequiredInt int' expects the parameter @RequiredInt'), which was not supplied.
Note: As Sproc has a table parameter,
((IObjectContextAdapter)this).ObjectContext.ExecuteFunction
is not an option for me!
Using:
Upvotes: 0
Views: 152
Reputation: 41
There is a Workaround:
var requiredIntParameter = new SqlParameter("RequiredInt", typeof(int));
requiredIntParameter.Value = 0;
Now log is
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
-- Completed in 40 ms with result: SqlDataReader
And everything is fine!
Upvotes: 1