Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次迭代的实体框架查询_C#_Entity Framework - Fatal编程技术网

C# 每次迭代的实体框架查询

C# 每次迭代的实体框架查询,c#,entity-framework,C#,Entity Framework,当使用EntityFramework时,经常会发生这样的错误:开发人员忘记了在DbSet上调用方法,比如Include(x=>x.Author),然后在foreach循环中调用blog.Author。结果,在每个循环迭代中,EF都会执行数据库查询,这非常慢 如何在这样的代码中检测位置?可能是静态代码分析器或类似的东西 在每个持续集成构建中搜索“不好的地方”是理想的。如果可能的话:)我恐怕没有什么好东西给你,但在一个不起眼的代码库上经历了类似的挫折,我想我会投入2美分。下面是我如何缓解这个问题的。

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

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


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

我恐怕没有什么好东西给你,但在一个不起眼的代码库上经历了类似的挫折,我想我会投入2美分。下面是我如何缓解这个问题的。这需要大量的工作,也许它可以在任何新的代码上完成,并且每当一个bug被修复时

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

基本思想是,您总是使用聚合根。这是一个来自领域驱动设计的概念,这是一个非常庞大的主题。 这是一本入门读物:


禁用延迟加载,它将不起作用。好的,但我们有很大的代码库,毫无疑问如何解决这个问题。问题是如何在大型项目中找到这个位置。您可以在源代码处禁用它,这样就没有人可以使用它,然后您的测试应该捕获发生的任何错误。(假设您有一个测试框架)