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}");
代码:
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}");