EntityFramework Database.ExecuteSqlCommandAsync ReturnValue不起作用

时间:2019-05-08 13:35:29

标签: c# stored-procedures entity-framework-6

使用MVC 5,EF6和c#
我有一个接受输入并返回值1的存储过程。(为简化示例)奇怪的是,当我尝试将Return值声明为ParameterDirection.Return Value时,我得到

的错误。
  

必须声明标量变量@ReturnVal

如果我将SQLParameterDirection切换为OutPut,则可以正常工作。我只是想了解为什么我不能使用ParameterDirection.ReturnValue?

这里有代码。

SP:

[dbo].TestProc ( @UserId int)
AS
BEGIN

return 1
end

和c#调用代码。

 public async Task<ActionResult> DoStuff()
    {

        using (var _context = new Model1())
        {
                SqlParameter sqlUserId = new SqlParameter("@UserId", 1) ;
                SqlParameter returnVal = new SqlParameter("@ReturnVal", SqlDbType.Int)
                {
                    Direction = ParameterDirection.ReturnValue
                };

           await  _context.Database.ExecuteSqlCommandAsync("exec @ReturnVal= [TestProc ] @UserId", returnVal, sqlUserId);
            var result  = (int)returnVal.Value;   // Return Correct Value. 
        }
        return View();
    }

1 个答案:

答案 0 :(得分:0)

我认为您需要在SP中声明@ReturnValue并将其返回。像

 [dbo].TestProc ( @UserId int, @ReturnValue int output)
AS
BEGIN
select @ReturnValue = 1    
end

我认为问题在于SP中不存在ReturnValue,因此在C#中创建SqlParameter时无法将其匹配