簡體   English   中英

EF Core 3.1,如何在帶有 PostgreSQL (npgsql) 或除 SQL Server 之外的任何數據庫上使用原始 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”不包含“ExecuteSqlCommand”的定義,並且找不到接受“DatabaseFacade”類型的第一個參數的可訪問擴展方法“ExecuteSqlCommand”(您是否缺少 using 指令或程序集類型引用?)

Context 類中有一個Database屬性,但它不能訪問直接的 SQL 原始查詢(即Context.Database )。

Microsoft 幫助Raw SQL Queries沒有說明如何在不使用特定Context類的情況下執行此操作。

我想要一個純 SQL 命令,我不想通過實體。 手里只有類名,想驗證表是否存在到數據庫中。 我沒有任何實例。 應該有一種方法可以對數據庫運行命令。

在此處輸入圖像描述

僅用於附加信息(沒有“ExecuteSqlCommand ...”):

在此處輸入圖像描述

實際文檔始終位於 docs.microsoft.com。 Entity Framework Core 3.1 中,原始 SQL 命令是ExecuteSqlRawExecuteSqlInterpolated ExecuteSqlCommand被標記為過時,這就是它沒有出現在 Intellisense 彈出窗口中的原因。 所有這些方法都是 DbContext 擴展,與 SQL Server 無關。 需要參數的方法需要 DbParameter 派生對象,而不是 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}");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM