c# - 在什么时候我需要将查询工作卸载到数据库?

标签 c# database asp.net-mvc-4 entity-framework-6

我有一个网络应用程序,我正在连接到一个带有 Entity Framework 的数据库。

例如,要选择特定部门的所有 Employee 记录,我可以很容易地编写:

....Employees.Where(o => o.Department == "HR").ToList();

工作正常。但这是最优的吗?

是否应将此 Where 子句合并到存储过程或 View 中?或者我的 Entity Framework 代码是否完成了将其转换为 SQL 的工作?

过去,当人们将记录提取到内存中,然后然后在 .net 中而不是在数据库级别进行过滤时,我们的团队就遇到过性能问题。我正在努力避免这种情况再次发生,所以我想清楚地知道我必须避免什么。

最佳答案

如果 Employees 由 Entity Framework 提供,则 Where() 将被翻译成 SQL 并发送到数据库。只有在具体化对象时,它才会采用您之前应用的过滤器并将它们转换为 SQL。在那之后的任何事情都只是普通的 LINQ to objects。

导致具体化发生的方法包括 .ToList().ToArray()(还有更多,但这两个可能是最常见的)。

如果您想查看 SQL Server 上发生了什么,您应该打开 SQL 事件探查器并查看正在发送的查询。

关于c# - 在什么时候我需要将查询工作卸载到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427996/

相关文章:

c# - Azure 数据库同步

database - 我可以使用 where equals 子句和 orderby 查询 Cloud Firestore 集合吗?

asp.net-mvc-4 - 在 Azure Web 中启用 CORS

c# - MVC 日期时间列表未保存

c# - 如何知道反序列化类的类型?(或对象)

javascript - 关闭弹出窗口

c# - 如何将文本框数据绑定(bind)到列表<>中的特定索引

c# - 在 C# 中将数据从 nvarchar 转换为 varchar

mysql - 具有不同类型参数的消息模板的数据库设计?

c# - MV4 路由 来自 MySQL 数据库的动态路由