EF Core 3.1,如何在带有 PostgreSQL (npgsql) 或 SQL 服务器以外的任何数据库上使用原始 sql

EF Core 3.1, how to use raw sql on a database with PostgreSQL (npgsql) or any other than SQL Server

代码:

public object GetRawSqlResult(string request)
{
        object result = ctx.Database.ExecuteSqlCommand(request);
        return result;
}

我收到 ExecuteSqlCommand 的错误:

CS1061: 'DatabaseFacade' does not contain a definition for 'ExecuteSqlCommand' and no accessible extension method 'ExecuteSqlCommand' accepting a first argument of type 'DatabaseFacade' could be found (are you missing a using directive or an assembly type reference?)

上下文 class 中有一个数据库 属性,但它不允许访问直接 SQL 原始查询(即:Context.Database)。

Microsoft 帮助:Raw SQL Queries 没有说明如何不使用特定上下文 class。

我想要纯 SQL 命令,我不想通过实体。在手中,我只有 class 名称,想验证 table 是否存在于数据库中。我没有任何实例。应该有一种方法可以 运行 针对数据库的命令。

仅供补充信息(没有“ExecuteSqlCommand...”):

actual documentation is always at docs.microsoft.com. In EF Core 3.1 the raw SQL commands are ExecuteSqlRaw and ExecuteSqlInterpolated. ExecuteSqlCommand 被标记为过时,这就是为什么它没有出现在 Intellisense 弹出窗口中的原因。所有这些方法都是 DbContext 扩展,与 SQL Server 无关。需要参数的方法需要一个 DbParameter-derived 对象,而不是特定的 SqlParameter。使用 NpgsqlParameter.

应该没有任何问题

但在许多情况下,您可以将参数值作为额外参数传递。例如:

using Microsoft.EntityFrameworkCore;
...

var id = 8;
var alwaysMinusOne = ctx.Database.ExecuteSqlRaw(
    @"SELECT * FROM ""Blogs"" WHERE ""Id"" = {0}",
    id);

var id = 8;
var alwaysMinusOne = ctx.Database.ExecuteSqlInterpolated(
                         $@"SELECT * FROM ""Blogs"" WHERE ""Id"" = {id}");