每次迭代的实体框架查询

时间:2015-10-19 08:12:19

标签: c# entity-framework

当经常使用EntityFramework时会出现这样的错误:开发人员在DbSet上忘记调用方法,如Include(x => x.Author),然后在foreach循环中调用blog.Author。结果,在每个循环迭代中,EF执行数据库查询,这非常慢。

如何检测这样的代码中的位置?可能是静态代码分析器还是类似的东西?

在每个持续集成构建中搜索“不良位置”是理想的。如果可能的话:))

1 个答案:

答案 0 :(得分:0)

恐怕我没有给你一颗银弹,但在一个不可忽视的代码库中经历了类似的挫折,我以为我会把它放在2美分。这是我如何缓解这个问题。这需要大量的工作,也许它可以在任何新代码上完成,并且每当修复错误时......

我建议您将实体划分为通常一起需要的聚合。然后,您创建可以将这些聚合作为一个组使用的存储库。例如,您总是通过查询客户获得订单,但如果您需要产品的订单商品详细信息,则必须通过OrderLineItem上的ProductId查询该产品。

基本思想是你总是使用聚合根。这是来自Domain Driven Design的概念,这是一个非常大的主题。 这是一本入门书:https://lostechies.com/jimmybogard/2010/02/04/strengthening-your-domain-a-primer/

http://dddcommunity.org/