Я пытаюсь использовать ExecuteSqlCommandAsync
из EF Core, чтобы получить результат запроса select в несколько странной устаревшей хранимой процедуре с пустым оператором RETURN
.
Хранимая процедура выглядит следующим образомthis:
CREATE PROCEDURE [dbo].[SelectNextCounter]
(
@CounterName nvarchar(50)
)
AS
UPDATE counter
SET NextValue = NextValue + 1
WHERE CounterName = @CounterName
SELECT NextValue
FROM counter
WHERE counterName = @CounterName
RETURN
GO
Используя этот код, я могу получить доступ к значению RETURN
хранимой процедуры (хотя меня действительно интересует NextValue
):
var counterName = new SqlParameter
{
ParameterName = "@CounterName",
Value = "CustomerNumber",
SqlDbType = SqlDbType.NVarChar
};
var returnValue = new SqlParameter
{
ParameterName = "@return_value",
Direction = ParameterDirection.Output,
SqlDbType = SqlDbType.Int
};
await _context
.Database
.ExecuteSqlCommandAsync(
"EXEC @return_value = SelectNextCounter @CounterName", counterName, returnValue
);
Затем я могу получить значение через returnValue.Value
(который всегда равен 0 из-за пустого оператора RETURN
).Однако есть ли способ получить значение из NextValue
с помощью EF Core?Похоже, что FromSql
может работать, но я на самом деле просто заинтересован в получении единственного значения, а не сущности. Этот ответ , кажется, делает то, что я хочу, но я бы предпочел использовать EF Core, чем SqlCommand
, если это возможно.