EntityFramework Database.ExecuteSqlCommandAsync ReturnValue Не работает - PullRequest
0 голосов
/ 08 мая 2019

с использованием MVC 5, EF6 и c #
У меня есть хранимая процедура, которая принимает входные данные и возвращает значение 1. (Упрощенно для примера). Странная часть заключается в том, что когда я пытаюсь объявить возвращаемое значение как значение ParameterDirection.Return, я получаю ошибку

Должен объявлять скалярную переменную @ 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 голосов
/ 08 мая 2019

Я думаю, что вам нужно объявить @ReturnValue в вашем SP и вернуть его. что-то вроде

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

Я думаю, что проблема в том, что ReturnValue не существует в вашем SP, поэтому он не может быть сопоставлен, когда вы создаете SqlParameter в вашем C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...