繁体   English   中英

实体框架SQL查询执行

[英]Entity Framework SQL Query Execution

使用实体框架,当一个人执行查询时,可以说2000条记录需要groupby和其他一些计算,查询是否在服务器上执行,只有结果发送到客户端,或者全部发送到客户端和然后执行?

这使用SQL Server。

我正在研究这个问题,因为我将要开始一个项目,在这个项目中,如果使用实体框架,在庞大的数据库上需要大量的查询,并想知道这是否会在网络上产生大量负载。

它总是在SQL Server上执行。 这也意味着有时你必须改变这个:

from q in ctx.Bar
where q.Id == new Guid(someString)
select q

Guid g = new Guid(someString);
from q in ctx.Bar
where q.Id == g
select q

这是因为构造函数调用无法转换为SQL。

Sql的groupby和linq的groupby返回不同形状的结果。

Sql的groupby返回密钥和聚合(没有组成员)

Linq的groupby返回密钥和组成员。

如果您使用这些组成员,则必须通过分组键(重新)提取它们。 可能导致每组 +1数据库往返。

我认为所有的数据库查询都是在服务器端完成的(数据库在哪里!)并且结果会被传递。 但是,在Linq中,您有所谓的延迟执行延迟执行 ),因此在您尝试访问它之前,实际上不会检索您的信息,例如调用ToList()或访问属性(相关表)。

如果需要,您可以选择使用LoadWith进行预先加载。

因此,就性能而言,如果您只想为查询(具有相关表)进行一次数据库访问,我建议使用LoadWith选项。 但是,它确实取决于具体情况。

好吧,前段时间我有同样的问题。 基本上:你的linq语句转换为sql语句。 但是:有些小组会被翻译,有些则不会 - 取决于你如何写你的陈述。
是的 - 两者都有可能

例:

var a = (from entity in myTable where entity.Property == 1 select entity).ToList();

var a = (from entity in myTable.ToList() where entity.Property == 1 select entity).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM