Хранимые процедуры в EF Core 3.0 - PullRequest
1 голос
/ 27 сентября 2019

Как использовать хранимые процедуры в EF Core 3.0?

Я пробовал следующее

var user = await _context.Query<User>().FromSql("EXECUTE dbo.spGeneral_Authenticate").FirstOrDefaultAsync();

var user = await _context.Query<User>().FromSqlRaw("EXECUTE dbo.spGeneral_Authenticate").FirstOrDefaultAsync();

var user = await _context.Set<User>().FromSql("EXECUTE dbo.spGeneral_Authenticate").FirstOrDefaultAsync();

var user = await _context.Set<User>().FromSqlRaw("EXECUTE dbo.spGeneral_Authenticate").FirstOrDefaultAsync();

Ядро EF, неправильно переводящее SQL.Я получил переведенный SQL из файла журнала.

2019-09-27 11: 21: 36.086 +05: 30 [Ошибка] Не удалось выполнить команду DbCommand ("30" мс) [Параметры = [""], CommandType = 'Text', CommandTimeout = '30 '] "" "SELECT TOP (1) [u]. [FullName], [u]. [Пароль], [u]. [UserName] FROM (EXECUTE dbo.spGeneral_Authenticate) AS [u] "2019-09-27 11: 21: 36.154 +05: 30 [Ошибка] Возникла исключительная ситуация при переборе результатов запроса для типа контекста '" __________Context "'." "" Microsoft.Data.SqlClient.SqlException (0x80131904): Неверный синтаксис рядом с ключевым словом «EXECUTE». Неверный синтаксис рядом с «)».

Перевод SQL:

SELECT TOP(1) [u].[FullName], [u].[Password], [u].[UserName]
FROM (
    EXECUTE dbo.spGeneral_Authenticate
) AS [u]

1 Ответ

0 голосов
/ 30 сентября 2019

Microsoft.Data.SqlClient.SqlException (0x80131904): неверный синтаксис рядом с ключевым словом «EXECUTE».Неверный синтаксис рядом с ')'.

Для вышеуказанной ошибки мы должны использовать .ToList () или .ToListAsync (), а не .FirstOrDefault () или .FirstOrDefaultAsync ()

Itбудет работать

var user = await _context.Set<User>().FromSql("EXECUTE dbo.spTest").ToListAsync();

не будет работать

var user = await _context.Set<User>().FromSql("EXECUTE dbo.spTest").FirstOrDefaultAsync();
/*
Transalated SQL:
SELECT TOP(1) [u].[FullName], [u].[Password], [u].[UserName]
FROM (
    EXECUTE dbo.spTest
) AS [u]
*/
...