Ef Core花里胡哨系列(11) ef8 无实体查询,你好!
1.Ef Core花里胡哨系列(2) 移除外键、扩展操作2.Ef Core花里胡哨系列(1) SafeDelete、ReadOnly、Audit 安全删除、只读、审计等3.Ef Core花里胡哨系列(3) 动态修改实体对应的表(分表)、多租户4.Ef Core花里胡哨系列(4) 多租户5.Ef Core花里胡哨系列(5) 动态修改追踪的实体、动态查询6.Ef Core花里胡哨系列(6) XML注释同步到数据库注释7.Ef Core花里胡哨系列(7) 使用Ef Core也能维护表架构?8.Ef Core花里胡哨系列(8) 如何可控管理Ef Core的迁移?9.Ef Core花里胡哨系列(9) 阴影属性,有用还是没用?10.Ef Core花里胡哨系列(10) 动态起来的 DbContext
11.Ef Core花里胡哨系列(11) ef8 无实体查询,你好!
Ef Core花里胡哨系列(11) ef8 无实体查询,你好!
EF7
引入了返回标量类型的原始 SQL
查询。 这在 EF8
中得到了增强,包括返回任何可映射 CLR
类型的原始 SQL
查询,而无需在 EF
模型中包括该类型。
使用非映射类型的查询是使用 SqlQuery
或 SqlQueryRaw
执行的。 前者使用字符串内插来参数化查询,这有助于确保所有非常量值都被参数化。
var result = _dbContext.Database.SqlQuery<Blog>($"select * from {typeof(Blog).Name}").ToList();
非常振奋人心的是,SqlQuery
的得到的结果是一个IQueryable
,也就是说,可以无缝对接Linq
!
所以你可以这样,在Sql
中直接写上你的条件:
var cutoffDate = new DateOnly(2022, 1, 1);
var summaries =
await context.Database.SqlQuery<PostSummary>(
@$"SELECT b.Name AS BlogName, p.Title AS PostTitle, p.PublishedOn
FROM Posts AS p
INNER JOIN Blogs AS b ON p.BlogId = b.Id
WHERE p.PublishedOn >= {cutoffDate}")
.ToListAsync();
或者这样,使用Sql
拼接表,再用Linq
进行筛选:
var summariesIn2022 =
await context.Database.SqlQuery<PostSummary>(
@$"SELECT b.Name AS BlogName, p.Title AS PostTitle, p.PublishedOn
FROM Posts AS p
INNER JOIN Blogs AS b ON p.BlogId = b.Id")
.Where(p => p.PublishedOn >= cutoffDate && p.PublishedOn < end)
.ToListAsync();
到目前为止,所有查询都是直接针对表执行的。 SqlQuery
也可用于在不映射 EF
模型中的视图类型的情况下从视图返回结果。 例如:
var summariesFromView =
await context.Database.SqlQuery<PostSummary>(
@$"SELECT * FROM PostAndBlogSummariesView")
.Where(p => p.PublishedOn >= cutoffDate && p.PublishedOn < end)
.ToListAsync();
甚至是函数:
var summariesFromFunc =
await context.Database.SqlQuery<PostSummary>(
@$"SELECT * FROM GetPostsPublishedAfter({cutoffDate})")
.Where(p => p.PublishedOn < end)
.ToListAsync();
亦或者是存储过程:
var summariesFromStoredProc =
await context.Database.SqlQuery<PostSummary>(
@$"exec GetRecentPostSummariesProc")
.ToListAsync();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?