<分区>
我长期使用 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 是否“遭受”同样的问题?