0

0

C# 如何在 EF Core 中执行原生 SQL 查询_C# EF Core 原生 SQL 查询方法

小老鼠

小老鼠

发布时间:2025-11-06 11:44:02

|

421人浏览过

|

来源于php中文网

原创

使用EF Core执行原生SQL可通过FromSqlRaw查询实体数据,如context.Products.FromSqlRaw("SELECT FROM Products WHERE Price > {0}", 100);执行非查询操作使用ExecuteSqlRaw,如批量更新context.Database.ExecuteSqlRaw("UPDATE Products SET Price = Price 1.1 WHERE CategoryId = {0}", categoryId);查询非实体类型数据可结合ADO.NET,通过context.Database.GetDbConnection()执行复杂查询并读取结果;推荐使用FromSqlInterpolated实现参数内插,如FromSqlInterpolated($"SELECT * FROM Products WHERE Price > {minPrice}"),自动参数化更安全。

c# 如何在 ef core 中执行原生 sql 查询_c# ef core 原生 sql 查询方法

在使用 C# 的 EF Core 时,虽然 LINQ 查询已经非常强大,但在某些复杂场景下,比如多表联查、聚合统计或调用数据库函数时,直接执行原生 SQL 更加灵活高效。EF Core 提供了多种方式来执行原生 SQL 查询,既能查询数据,也能执行插入、更新、删除等操作。

使用 FromSqlRaw 执行查询

当需要从数据库中查询实体数据时,FromSqlRaw 是最常用的方法。它允许你在 DbSet 上执行原始 SQL 查询,返回的结果必须映射到实体类型。

例如,假设你有一个 Product 实体:

public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } }

你可以这样执行原生 SQL 查询:

var products = context.Products.FromSqlRaw("SELECT * FROM Products WHERE Price > {0}", 100).ToList();

注意:SQL 中的参数应使用 {0} 占位符,避免拼接字符串,防止 SQL 注入。

执行非查询语句(INSERT、UPDATE、DELETE)

对于不返回数据的操作,如修改或删除,可以使用 ExecuteSqlRaw 方法。

例如,批量更新价格:

context.Database.ExecuteSqlRaw("UPDATE Products SET Price = Price * 1.1 WHERE CategoryId = {0}", categoryId);

这个方法返回受影响的行数,适合用于写操作。

Smodin AI Content Detector
Smodin AI Content Detector

多语种AI内容检测工具

下载

查询非实体类型的数据

有时候你需要查询的数据并不对应某个实体类,比如统计结果或视图数据。这时可以结合 Ado.NET 使用原生 ADO 操作。

通过 Database.GetDbConnection() 获取连接:

using var connection = context.Database.GetDbConnection();
connection.Open();
using var command = connection.CreateCommand();
command.CommandText = "SELECT CategoryName, COUNT(*) as Count FROM Products p JOIN Categories c ON p.CategoryId = c.Id GROUP BY CategoryName";
using var reader = command.ExecuteReader();
while (reader.Read()) {
  Console.WriteLine($"{reader["CategoryName"]}: {reader["Count"]}");
}

这种方式适用于无法映射到实体的复杂查询。

使用 FromSqlInterpolated 简化参数传递

EF Core 还提供了 FromSqlInterpolated,支持字符串内插语法,写起来更直观:

var minPrice = 50;
var products = context.Products.FromSqlInterpolated($"SELECT * FROM Products WHERE Price > {minPrice}").ToList();

它会自动处理参数化,安全性高,推荐在支持的场景中使用。

基本上就这些。根据实际需求选择合适的方法:查询实体用 FromSqlRawFromSqlInterpolated,执行命令用 ExecuteSqlRaw,复杂结果集则搭配 ADO.NET 处理。只要注意参数化和映射问题,原生 SQL 在 EF Core 中用起来很顺手。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

673

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

344

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1080

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

355

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

670

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

561

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

404

2024.04.29

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.2万人学习

C 教程
C 教程

共75课时 | 3.6万人学习

C++教程
C++教程

共115课时 | 9.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号