规范的LINQ查询是否可以防止N + 1

史诗先生

默认情况下使用延迟加载,我知道您应该在Entity Framework实体上调用.Include()来拉入您要在查询中关联的实体,以减少在数据库上调用LINQ方法时对数据库的调用次数实体。如果不这样做,则冒着对每一行重复数据库调用的风险(N + 1问题)

有人可以确认如果我编写了一个显式定义的联接的规范LINQ查询,那么我们可以防止N + 1吗?

from x in _context.tblOrder
join y in _context.tblCustomer equals y.id = x.customerId
select x

当我们使用联接加载所有必需的实体时,N + 1会以任何方式蔓延吗?

编辑

作为背景,有人问初级开发人员如何防范N + 1。我提到了最简单的方法是写出您的查询并定义您的联接,我想要确认那是100%准确的。

詹姆士

如果您真正要问的是

该查询将一次命中数据库吗?

那么答案是肯定的。LINQ to EF会将您的表达式转换为原始SQL,只有在您评估查询时,它才会将任何内容发送到数据库,例如ToList()/ foreach/ foretc。一旦发送了该查询,就不会发送其他任何内容,除非您另外明确声明。

您的LINQ语句可以使用Lambda表达式进行简化,例如

_context.tblOrder.Include("Customer").ToList();

这将在一次数据库行程中为您提供所有订单详细信息,包括所有相关的客户详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取关联模型的最后一条记录以防止 N+1 查询?

运行多个测试程序集时,“-workers:1”是否可以防止nunit3-console中的并行化?

是否可以防止从共享URL中剥离查询参数?

是否可以防止ReplicaSet扩大/缩小?

是否可以防止Javascript中的popstate?

是否可以防止Trim()删除空格?

Doctrinepersist()是否可以防止SQL注入?

Git是否可以防止数据降级

Querydsl 是否可以防止 SQL 注入

是否可以防止在组件状态更改/重新呈现时重新获取“ useLazyQuery”查询?

PetaPoco的Query(字符串查询,参数)方法是否可以防止SQL注入?

单个令牌是否可以防止RESTful API中的csrf?

Spring中的SimpleJdbcTemplate是否可以防止SQL注入?

是否可以防止用户在后台运行C ++程序?

是否可以防止Windows 10 uwp中的锁定屏幕?

是否可以防止从冻结的python数据类读取?

私人浏览是否可以防止套接字事件?

“ NOT NULL”是否可以防止rowid混叠?

是否可以“保护” IFS字符以防止字段分裂?

持有C ++参考是否可以防止变量被破坏?

Knex.js是否可以防止SQL注入?

ACPI损坏的电池是否可以防止过度充电?

Spring Data JPA是否可以防止SQL注入

是否可以防止在每个HTTP请求中发送cookie?

Java / Hibernate Criteria Query API是否可以防止注入?

是否可以防止sshfs创建goutputstream文件?

是否可以防止修改对象的特定键值?

Java是否可以防止重写静态方法?

使用UID作为密钥是否可以防止CSRF攻击?