gpt4 book ai didi

c# - 为什么使用 EF/Linq to sql 创建性能不佳的查询如此容易

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:35 25 4
gpt4 key购买 nike

<分区>

我长期使用 linq-to-sql 和 ado.net entityframework。每次我们遇到性能问题,几乎都是因为使用了 EF/linq to sql。编写代码来触发大量查询或首先获取 1000 条记录以在给出实际结果之前做一些内部工作似乎很容易。即使以我对这个问题的知识和经验,我也经常发现自己使用某种逻辑 C# 语句,它会触发对数据库执行的非常不合逻辑的查询。

一个简单的例子:假设您有 2 个表 Customer 和 Invoices。发票有一个 CustomerID 到 Customer 表

这将首先从数据库中获取所有发票记录,然后检查是否有任何记录。如果您的客户有 1000 张发票,则 1000 条记录将从数据库发送到您的应用程序

Customer.Invoices.Any() //or .Where or some paging statement or ...

这里的解决方案是直接在datacontext上查询

db.Invoices.Any(invoice=>invoice.CustomerID=Customer.CustomerID)

我确信总会有技术解释和解决问题的解决方案,但它似乎很不合逻辑,以至于映射器很容易搞砸应用程序的性能。这些映射器非常简单,因此任何初级程序员都可以使用它,并承担所有后果。我见过一些或多或少有经验的开发人员甚至都没有意识到这个问题。为什么我在谷歌上找不到任何关于这个“陷阱”的引用资料?我看不到正确的道路吗?其他像 NHibernate 这样的 ORM 是否“遭受”同样的问题?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com