如何在 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 core 以错误的方式翻译 SQL。我从日志文件中获取了翻译后的 SQL。
2019-09-27 11:21:36.086 +05:30 [错误] 执行 DbCommand 失败
(“30”毫秒)[参数=[“”],CommandType='Text',CommandTimeout='30']”
""选择 TOP(1) [u].[全名], [u].[密码], [u].[用户名] 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]
Microsoft.Data.SqlClient.SqlException(0x80131904):语法不正确
靠近关键字“EXECUTE”。 ')' 附近的语法不正确。
对于上述错误,我们应该使用 .ToList() 或 .ToListAsync() 而不是 .FirstOrDefault() 或 .FirstOrDefaultAsync()
会起作用的
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]
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)