如何从 PostgresException 中获取错误 sql

How to get error sql from PostgresException

ASP.NET Core 6 MVC 应用程序使用 EF Core 和 Npgsql。

Ef 核心命令如

await ctx.Kasutajas.Where((k) => k.Kasutaja1 == suurusername).SingleOrDefaultAsync();

在缺少列的情况下抛出 PostgresException。 BatchCommand 属性 为空。看起来 EF Core 没有使用批处理命令接口。在这种情况下如何获得错误 sql?

   app.Use(async (context, next) =>
            {
                try
                {
                    await next.Invoke();
                }
                catch (PostgresException ex)
                {
ex.BatchCommand in null.
ex.InternalQuery is null.
            Debug.WriteLine(ex.InternalQuery);
?? How to get error Sql ?
                }
                }
            });

在 .NET 5 Ngpsql 中对此有声明 属性 但它已根据

删除

https://www.npgsql.org/doc/release-notes/6.0.html#npgsqlstatement-and-postgresexceptionstatement-have-been-removed

如何在异常处理程序的 CATCH 块中获取错误 SQL? https://github.com/npgsql/npgsql/issues/4222 中的讨论 不提供解决方案。

PostgresException.BatchCommand 正在为常规命令添加支持,例如 pre-6.0 Npgsql 中的 PostgresException.Statement。参见 https://github.com/npgsql/npgsql/issues/4222