![]() |
1
0
为什么会发生这种情况(在一些研究之后)的答案是非常有趣的,并且是一个很好的例子,说明为什么知道ef核心如何工作对于使用它是很重要的。 Linq一般都在研究延迟执行的思想。简单地说,如果我在一个特定的行上创建一个LINQ语句,在数据“需要”之前,它可能不会被计算或执行。这里的一般思想是,有时不需要数据集(例如,如果异常在评估之前发生,但在“加载”之后发生)。 ef core更进一步,将延迟执行的思想与数据库优化联系起来。例如,如果我从数据库中获取数据的子集:
但后来我只关心数据集的大小:
DB调用可以优化为
而不是
同样,我上面的查询也被优化掉了。因为在评估之前我链接了整个过程,所以ef核心优化器丢弃了一个我需要的表。 这样做的原因是:
因为我强制执行查询
然后在内存中去掉客户对象(以及它下面的品牌对象)。生成这样的查询会更有效:
但是,这会被优化掉。 |
![]() |
Vinod · 如何为应用程序和迁移使用单独的连接字符串? 7 年前 |
![]() |
LP13 · 如何对记录进行分组并仅检索前N个记录的第一个组 7 年前 |
![]() |
rasmus91 · 使用EF核心级联删除 7 年前 |
![]() |
okieh · EF Core 2.0迁移-多对多以及其他字段 7 年前 |
![]() |
Lorenzo OnoSendai · EF Core 2跨数据库迁移 7 年前 |