【发布时间】:2019-09-27 06:02:22
【问题描述】:
如何在 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"ms) [Parameters=[""], CommandType='Text', CommandTimeout='30']" ""SELECT TOP(1) [u].[FullName], [u].[Password], [u].[UserName] FROM ( EXECUTE dbo.spGeneral_Authenticate ) AS [u]" 2019-09-27 11:21:36.154 +05:30 [Error] 迭代时发生异常 上下文类型 '"__________Context"' 的查询结果。 ""Microsoft.Data.SqlClient.SqlException (0x80131904): 语法不正确 在关键字“执行”附近。 ')' 附近的语法不正确。
翻译后的 SQL:
SELECT TOP(1) [u].[FullName], [u].[Password], [u].[UserName]
FROM (
EXECUTE dbo.spGeneral_Authenticate
) AS [u]
【问题讨论】: