[英]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 命令是ExecuteSqlRaw和ExecuteSqlInterpolated 。 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.