以下代码是我尝试运行的代码的简化版本,但应该传达相同的消息。
将 EF 与 NpgSQL 结合使用时,我可以使用以下方式调用原始 SQL 查询:
Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.SqlQuery<string>(FormattableString sql)
由于某种原因,运行以下代码时,运行成功:
//Functional Version
string TargetString = "";
FormattableString BasicVersion = $"SELECT * FROM tenant";
IQueryable<string> QueryableBasicVersion = _context.Database.SqlQuery<string>(BasicVersion);
按预期返回带有 Expression.Sql 的 QueryableBasicVersion 作为“SELECT * FROMtenant”。然后我就可以按预期读取此响应。
但是当我运行以下命令时:
//Non-Functional Version
string TargetString1 = "";
string ParsedVariable = "tenant";
FormattableString AdvancedVersion = $"SELECT * FROM {ParsedVariable}";
IQueryable<string> QueryablyAdvancedVersion = _context.Database.SqlQuery<string>(AdvancedVersion);
这应该提供相同的 SQL 语句,但它是“SELECT * FROM {0}”。它应该引用调用时的变量。然后,当尝试以与第一个相同的方式读取数据时,出现以下错误:
MessageText: invalid input syntax for type uuid: "@p0"
(在我的原始代码中,我返回一个字符串而不是*,并且我正在替换一个uuid,因此出现上面的错误消息。但同样的问题也适用)
为什么数据库的响应返回错误? 第二种方法是否需要不同的方式来读取响应? 不应该是完全相同的调用吗? 也许我在这里遗漏了一些非常基本的东西。
非常感谢任何建议!
感谢您的阅读, 马特
根据 Ivan Stoev 的回复,SqlQueryRaw 有效,然后您可以导入字符串而不是格式化字符串。