SingleOrDefault()是否远程查询?

时间:2017-10-02 11:58:41

标签: c# sql-server performance entity-framework linq

考虑在不同位置使用各种计算机的环境。这些计算机运行Windows应用程序,并且计时器检查每5分钟要同步的新数据。信息通过互联网连接同步到集中位置。客户端计算机和集中式服务器上的数据库是SQL Server数据库。

在写入远程(集中式)服务器之前,SingleOrDefault()方法用于检查具有相同ID的记录是否存在远程。客户报告使用的互联网数据激增。我想知道集中式数据库是否已经变得太大而且SingleOrDefault通过连接返回整个可查询数据并执行查询客户端。可能是这种情况吗?什么是另一种不能做同样事情的替代解决方案?

1 个答案:

答案 0 :(得分:3)

如果您使用的是Queryable.SingleOrDefault,那么它将在服务器上处理(如果您记录数据库查询,则可以在top 2 1 <中查看select的使用情况/ SUP>)。

但是,如果您使用的是Enumerable.SingleOrDefault,那么它将在(数据库)客户端上进行处理。

您需要避免从IQuerable<T>转换为IEnumerable<T>(例如,使用AsEnumerable)。

可以通过代码检查或查看生成的SQL来检测这一点。

1 top 2用于检测多个结果,使用SingleOrDefault时出错。