使用字符串插值时 SQLQuery 失败,如何读取响应?

问题描述 投票:0回答:1

以下代码是我尝试运行的代码的简化版本,但应该传达相同的消息。

将 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,因此出现上面的错误消息。但同样的问题也适用)

为什么数据库的响应返回错误? 第二种方法是否需要不同的方式来读取响应? 不应该是完全相同的调用吗? 也许我在这里遗漏了一些非常基本的东西。

非常感谢任何建议!

感谢您的阅读, 马特

c# entity-framework-core psql npgsql
1个回答
0
投票

根据 Ivan Stoev 的回复,SqlQueryRaw 有效,然后您可以导入字符串而不是格式化字符串。

© www.soinside.com 2019 - 2024. All rights reserved.