Предположим имеется следующая скалярная функция хранящаяся в бд сервера:
CREATE FUNCTION dbo.spTest ()
RETURNS INT
BEGIN
DECLARE @result INT;
SET @result = 1;
RETURN @result;
END
GO
Как вызвать данную функцию с использованием entity frameworkа и получить результат?
Пробовал делать так:
var cmd = _context.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[spTest]";
if (cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
try
{
var result = cmd.ExecuteReader();
}
catch (Exception)
{
throw;
}
result не содержит значений. на основании этого примера
Так же нашел следующий совет
на основании которого попробовал сделать так:
var query = _context.Database
.SqlQuery(typeof(int),"dbo.spTest").ToListAsync();
var downtime = (int)query.Result.Single();
на что получаю следующее исключение:
The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.
Ответ
Нужно изменить cmd.CommandText
cmd.CommandText = "SELECT [dbo].[spTest] ()";
Если функция с параметрами:
cmd.CommandText = "SELECT [dbo].[spTest](@param)";
Комментариев нет:
Отправить комментарий