我有一个DataContext
实例,我想用它来执行原始SQL(如果可能的话)。我记得那"常规" EntityFramework 6可以执行此操作(https://msdn.microsoft.com/en-us/library/bb361109(v=vs.110).aspx),但我无法在Core中找到任何方法。我听说过FromSql
扩展方法(https://docs.microsoft.com/en-us/ef/core/querying/raw-sql),但在myContext.myTable
时没有显示。
以下是我的参考资料(图片,因为我太懒了,无法输入)。
答案 0 :(得分:0)
我意识到这是一个老问题,但是无论如何,这里有一些答案。
您有2种选择,具体取决于您要执行的操作:
using Microsoft.EntityFrameworkCore;
...
var sql = "select * from clients";
var clients = _clientDbContext.Clients.FromSql(sql);
请注意,这要求您具有一个与sql语句的输出和DbContext实现上定义的相关DbSet相匹配的Client实体。
using (var conn = (SqlConnection)((DbContext)_clientDbContext).Database.GetDbConnection())
{
conn.Open();
using (var reader = new SqlCommand(sql, conn).ExecuteReader())
{
...
}
conn.Close();
}
现在,您可以访问原始DbConnection和ADO.NET世界,并且可以使用SqlCommand,DataTables等运行任何SQL并管理自己返回的数据。
我会提醒您不要混合使用实体框架和直接的SQL数据库更新-但这对于拾取一小段数据(例如配置值或运行存储过程)很有用。