小编典典

在EF Core 2.1中的DbContext上执行RAW SQL

sql

对此进行了研究,并始终找到这样的示例:

var blogs = context.Blogs
    .FromSql("SELECT * FROM dbo.Blogs")
    .ToList();

问题是,我不想在Blogs表上运行原始SQL。基本上,我想实现这样的接口:

bool ExecuteNonSafeSql(
    string connectionString,
    string sql);

有没有办法用DbContext做到这一点?


阅读 41

收藏
2021-04-22

共1个答案

小编典典

在撰写本文时(EF Core 2.1),尚无任何方法可以执行 返回 SQL命令的任意 安全性

只有实体类型和查询类型是通过支持FromSql

因此,最接近的解决方案是定义查询类型(保存查询结果的类)并使用FromSql,但这不是通用的-查询类型必须在DbContextvia fluent
API中注册,并且该方法应接收一个指定该类型的通用参数,例如

class ResultType
{
   // ...
}

然后

modelBuilder.Query<ResultType>();

最后

db.Query<ResultType>().FromSql(...)

请注意,该代码Database.ExecuteSqlCommand可以执行任意SQL,但不能用于返回序列(IEnumerable<T>IQueryable<T>)。

2021-04-22