在我的应用程序中,我有一个使用25个包含的大讨厌查询。我知道这可能有点过分,但它没有给我们带来太多问题,并且一直很好。如果我接受EF生成的查询并在数据库中手动运行它需要大约500ms,并且从代码EF使用大约700ms来从数据库获取数据并构建对象结构,这是完全可以接受的。
但问题出在生产服务器上。如果我手动运行查询,我会看到大约500ms的时间用于获取数据,但实体框架现在使用大约11000ms来获取数据并构建对象,这当然不是任何措施都不好。
所以我的问题是:当在数据库上手动触发的查询大致相同时,这些极端差异的原因是什么?
答案 0 :(得分:0)
我最终以更“手动”的方式使用实体框架。
因此,我不得不手动使用一系列dbContext.Set<T>
而不是dbContext.Database.SqlQuery<T>("select something from something else")
和许多包含。经过一些痛苦的编码将所有对象绑定在一起后,我在有问题的机器上对它进行了测试,现在它在所有机器上按预期工作。
所以我不知道为什么它在某些机器上运行而在其他机器上运行,但是当有大量包含时,EF似乎在某些机器设置上存在问题。