繁体   English   中英

如何从 EntityFramework Core 中的 DataContext 运行原始 SQL 查询

[英]How to run a raw SQL query from DataContext in EntityFramework Core

我有一个DataContext实例,我想用它来执行原始 SQL(如果可能)。 我记得“常规”EntityFramework 6 可以做到这一点( https://msdn.microsoft.com/en-us/library/bb361109(v=vs.110).aspx )但我找不到任何方法在核心。 我听说过FromSql扩展方法( https://docs.microsoft.com/en-us/ef/core/querying/raw-sql )但是在myContext.myTable时没有出现。

下面是我的参考资料(图片是因为我懒得打出来)。

在此处输入图片说明

我意识到这是一个老问题,但无论如何这里有一些答案。

您有 2 个选项,具体取决于您要执行的操作:

选项 1:DbSet FromSql

using Microsoft.EntityFrameworkCore;
...
var sql = "select * from clients";
var clients = _clientDbContext.Clients.FromSql(sql);

请注意,这要求您拥有一个与 sql 语句的输出以及在您的 DbContext 实现中定义的相关 DbSet 相匹配的 Client 实体。

选项 2:原始数据访问

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 数据库更新 - 但这对于获取一小部分数据很有用 - 可能是配置值,或运行存储过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM