EF架构~看看下面这代码,你还敢用它的延时加载吗?
linq to entity或者linq to sql都提供了非常方便的延时加载功能,什么意思?就是说在建立对象时,它会将数据库中的表关系同时建立进来,然后在查询时,如果用到的外键表的数据,才会建立这个外键表的查询,这一点确实很“酷”,但是它是有代价的,甚至代价是巨大的。
我一直不太喜欢我命运被别人去掌握着,写代码也一样,说着很好听的“延时加载”,用着也算方便,但对于它生成的SQL代码却是让我很恐惧的,下面看一下截图:
这是一个查出10条结果的语句
这只是一部分,它对于建立SQL的connection是10次,傻眼了吧,呵呵,这绝对是不能接受的,但如果你不用外键表,它是很正常的,一个SQL链接就搞定了,当然这是正常的。
其时,EF把复杂查询进行了封装,在它看来叫“延时加载”,对我来说就是关系表的复杂查询,有时我们应该把它提出来,自己去写这个LINQ语句,而不用系统所畏的“延时加载”,下面是自己写的LINQ语句的结果:
恩,自己写的查询结果,是我们可以接受的,也是我们可以控制的,呵呵。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)