asp.net-mvc - .包含在 Entity Framework 中有多贵?

标签 asp.net-mvc entity-framework azure azure-sql-database

我在 ASP.NET MVC 操作方法中有以下简单查询。

IEnumerable<Company> query = unitOfWork.CompanyRepository.dbSet
    .Include("Adresses.PhoneNumbers")
    .Include("Adresses.FaxNumber")
    .Include("Emails").Where(q => q.CustomerCompany == true);

此操作方法是通过 ajax get 请求调用的,有时需要长达 25 秒!数据库中只有 40 个公司。每个公司都有一个地址,最多有几个电话号码和传真号码。(有趣的是,有时需要 200-500 毫秒,但非常罕见)

如果我将此查询更改为以下

IEnumerable<Company> query = unitOfWork.CompanyRepository.dbSet
    .Where(q => q.CustomerCompany == true);

只需要大约 200 毫秒。

所以我想知道为什么 .Include 如此昂贵。我的应用程序正在生产中,并且我正在将 SQL Azure 与 Azure 网站结合使用。

谢谢。

最佳答案

生成的 SQL 更复杂,但通常性能是由于 LINQ 查询编译开销。您需要进行分析才能确定。一种可能的解决方法是使用预编译查询,这在第二次及后续次数中会更快。更好的解决办法可能是仅使用所需数据的投影,而不是在查询中包含 4 个实体,这相当于在所有 4 个表上使用 SELECT *。如果您需要所有这些完整实体,另一个可能的修复方法是显式加载详细信息,这意味着更多(但更快!)查询。

关于asp.net-mvc - .包含在 Entity Framework 中有多贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866560/

相关文章:

azure - 如何实现多个IdentityServer

Azure devops 管道 : Cannot find Docker Image when Pushing to Azure Registry, 'tag ***/appname'

c# - 删除 Azure Keyvault 上的 secret 不起作用

asp.net-mvc - ValidationMessageFor 一直返回错误

javascript - 通过 javascript 更改值时元素不更新错误状态

asp.net - ASP.NET Core 中的 Server.MapPath 等价物是什么?

entity-framework - EntityFramework 使用连接对查询进行分页

c# - 在不将所有行都放入内存的情况下使用 LINQ to Entity

javascript - 如何在运行时在knockoutjs对象中添加新的计算属性?

c# - 与 Entity Framework 的松散耦合