[英]Execute RAW SQL on DbContext in EF Core 2.1
在撰寫本文時(EF Core 2.1),尚無辦法執行返回 SQL命令的任意安全性 。
通過FromSql
僅支持實體類型和查詢類型 。
因此,最接近的解決方案是定義查詢類型(一個保存查詢結果的類)並使用FromSql
,但這不是通用的-查詢類型必須通過fluent API在DbContext
注冊,並且該方法應接收一個通用的參數來指定該類型,例如
class ResultType
{
// ...
}
然后
modelBuilder.Query<ResultType>();
最后
db.Query<ResultType>().FromSql(...)
請注意, Database.ExecuteSqlCommand
可以執行任意SQL,但不能用於返回序列( IEnumerable<T>
, IQueryable<T>
)。
您可以使用context.Database.ExecuteSqlCommand()
執行sql。
如果要使用SqlCommand
,可以通過以下方式獲取連接
var cnn = (SqlConnection) context.Database.GetDbConnection();
cnn.Open();
using (var cmd = new SqlCommand(sql, cnn))
using (var rdr = cmd.ExecuteReader(CommandBehavior.SingleResult))
您可以將Database.SqlQuery()
直接用於上下文。
在這里,我創建了一個泛型函數,可以直接針對數據庫而不是實體直接執行查詢。
public static List<T> Execute<T>(MyDbContext context, string query) where T : class
{
var result = context.Database
.SqlQuery<T>(query)
.ToList();
return result;
}
您可以使用上述功能,例如
var blogs = Execute<Blog>(context, "SELECT * FROM dbo.Blogs");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.