新闻中心
C# 如何在 EF Core 中执行原生 SQL 查询_C# EF Core 原生 SQL 查询方法
使用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 时,虽然 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();
它会自动处理参数化,安全性高,推荐在支持的场景中使用。
基本上就这些。根据实际需求选择合适的方法:查询实体用 FromSqlRaw 或 FromSqlInterpolated,执行命令用 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选座安静区域选择策略
护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?


2025-11-06
浏览次数:次
返回列表