据我所知,编译查询现在不支持Entity Framework Code First(4.2)。 不使用编译查询的性能相当高,所以我试图找到一个解决方案。
我现在做了以下工作: 创建一个继承自ObjectContext的新类 - 使用相同的EntityConnection将其与DbContext一起实例化。使用CreateObjectSet<>为实体创建ObjectSet并将该conext用于编译的查询。这是有效的(对于小型查询,性能上升了10倍)但由于需要为每个新实体(!DRY)创建ObjectSet属性,因此它相当麻烦。
有谁知道更优雅的解决方法吗?
答案 0 :(得分:2)
看起来您正在使用DbContext和EDMX。如果查询性能是您主要关注的问题,并且您需要使用已编译的查询,则不要使用DbContext API并使用ObjectContext API编写整个应用程序。对应用程序的一半使用ObjectContext,对应用程序的后半部分使用DbContext必须导致代码重复。
DbContext API有一些限制,它可能不会在不久的将来支持选择性编译查询。下一版本的EF将提供自动编译和重用所有LINQ查询的可能性。