【发布时间】:2014-02-24 22:48:18
【问题描述】:
我们的 linq to EF 查询的首次运行需要很长时间。在预先生成视图后,我很惊讶地发现没有任何区别。我在stackoverflow
上遇到了以下声明视图生成仅对“标准”查询有帮助(例如,当您调用 someObject.RelatedEnd.Load() 或 MyContext.SomeSetName() 时。出于显而易见的原因,它对使用 LINQ 或 ESQL 的即席查询没有帮助。使用 CompiledQuery 来优化这些。
当他说“出于显而易见的原因”时,我不得不说,“嗯,对我来说还不是很明显”。如果我正确理解这一点,他声称 Linq to SQL 查询不受预生成 EF 视图的影响。
我曾认为实体视图是实体和表之间的通用映射,与任何特定查询无关。这是误会了吗?
我可以看到在我们的 Linq to Entities 查询的第一次运行中使用了大量时间,之后的时间大大减少,因此我假设正在为相关实体和表生成视图。如果它不是一个可以在第一次运行时预先生成的 EF 视图,那么它是什么?
所以我的问题分为三个部分:
是否为每个查询生成 EF 视图,或者它们只是将表与实体相关联,而不管进行的查询如何?
上述关于预生成 EF 视图对 Linq 到 EF 查询没有影响的说法是否正确?是否必须改用 CompileQueries?
- 上面提到的“明显原因”是什么?
注意:我什至不会问,但如果您使用 EF,互联网上有很多建议(包括 msdn)来预生成视图。这是我看到的唯一一个地方,它建议如果您使用 Linq to Entities,那么预生成与您的查询无关。
【问题讨论】:
标签: entity-framework entity-framework-6