我对此进行了研究,并始终找到这样的示例:
var blogs = context.Blogs .FromSql("SELECT * FROM dbo.Blogs") .ToList();
问题是,我不想在Blogs表上运行原始SQL。基本上,我想实现这样的接口:
bool ExecuteNonSafeSql( string connectionString, string sql);
有没有办法用DbContext做到这一点?
在撰写本文时(EF Core 2.1),尚无任何方法可以执行 返回 SQL命令的任意 安全性 。
只有实体类型和查询类型是通过支持FromSql。
FromSql
因此,最接近的解决方案是定义查询类型(保存查询结果的类)并使用FromSql,但这不是通用的-查询类型必须在DbContextvia fluent API中注册,并且该方法应接收一个指定该类型的通用参数,例如
DbContext
class ResultType { // ... }
然后
modelBuilder.Query<ResultType>();
最后
db.Query<ResultType>().FromSql(...)
请注意,该代码Database.ExecuteSqlCommand可以执行任意SQL,但不能用于返回序列(IEnumerable<T>,IQueryable<T>)。
Database.ExecuteSqlCommand
IEnumerable<T>
IQueryable<T>