新闻中心

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

2025-11-06
浏览次数:
返回列表
使用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);

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

刺鸟创客 刺鸟创客

一款专业高效稳定的AI内容创作平台

刺鸟创客 110 查看详情 刺鸟创客

查询非实体类型的数据

有时候你需要查询的数据并不对应某个实体类,比如统计结果或视图数据。这时可以结合 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 中用起来很顺手。

以上就是C# 如何在 EF Core 中执行原生 SQL 查询_C# EF Core 原生 SQL 查询方法的详细内容,更多请关注其它相关文章!


# 但在  # 旅游网站营销推广口号  # 能写文章推广网站  # 淮北抖音营销推广价格  # 社交网站怎么推广产品  # 西城品牌网络营销推广  # 黑帽seo还好做吗  # 青岛网站建设和优化  # 观潮课件网站建设  # 收费关键词排名怎么做  # b2b企业营销推广  # 推荐使用  # c#  # 也能  # 你在  # 抽象类  # 你可以  # 如何使用  # 如何在  # 信号量  # 内插  # .net  # go  # ef core 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  如何在CSS中使用visited与link控制链接颜色_visited link伪类配合  Win11怎么开启高性能模式_Windows 11电源计划优化设置  浏览器打开即用 美图秀秀网页版入口  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间  Composer如何在生产环境安全地执行composer update  HTML空白字符处理机制:渲染、DOM与编码实践  MongoDB聚合管道:正确匹配对象数组中_id的方法  快手极速版在线观看 官方网页版登录地址  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接  Android Studio计算器C键功能异常排查与修复教程  单12V-2×6实现为RTX 5090供电750W!甚至都没敢跑分  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  Surface怎么安装系统 微软Surface Pro U盘重装win11教程  Angular中父组件异步更新子组件复选框状态的实践指南  Shopware订单对象中获取产品自定义字段的正确方法  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  零跑汽车11月交付量达70327台 实现连续9个月正增长  如何提高微信支付的安全性_微信支付安全防护与设置建议  支付宝如何管理隐私设置_支付宝隐私保护的配置技巧  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  msn官网入口地址手机版 msn官方网站手机最新链接  Yandex免登录网页版地址 Yandex搜索引擎官方访问入口  Web Components中自定义开关组件状态同步的常见陷阱与解决方案  163邮箱登录密码 163邮箱忘记密码找回  c++ 获取系统当前时间 c++时间戳获取方法  2025-2030年全球乘用车销量预测:新能源成增长主力  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  Lar*el Excel导入时生成自定义递增ID的策略与实践  Django表单提交验证失败后保持字段值不刷新  深入理解Promise链:如何在catch后中断then的执行  修复二维数组索引越界异常:一维循环到二维坐标的正确映射  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  Python多版本共存与虚拟环境管理深度指南  Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法  J*a TimerTask中HashMap意外清空的深层原因与解决方案  黑猫投诉统一入口官网 消费者权益保护投诉平台  React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性  win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】  Django表单验证失败时保留用户输入数据的最佳实践  163邮箱官方主页登录 直达网易邮箱登录核心页面  解决Flask中Quill编辑器内容提交失败及TypeError的指南  cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法  必由学官方网站入口 必由学学生教师共用登录通道  12306怎么选座位选到安静区_12306选座安静区域选择策略  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印? 

搜索