实体框架CF(DbContext)和编译的查询

时间:2011-12-02 18:07:24

标签: c# .net entity-framework ado.net

据我所知,编译查询现在不支持Entity Framework Code First(4.2)。 不使用编译查询的性能相当高,所以我试图找到一个解决方案。

我现在做了以下工作: 创建一个继承自ObjectContext的新类 - 使用相同的EntityConnection将其与DbContext一起实例化。使用CreateObjectSet<>为实体创建ObjectSet并将该conext用于编译的查询。这是有效的(对于小型查询,性能上升了10倍)但由于需要为每个新实体(!DRY)创建ObjectSet属性,因此它相当麻烦。

有谁知道更优雅的解决方法吗?

1 个答案:

答案 0 :(得分:2)

看起来您正在使用DbContext和EDMX。如果查询性能是您主要关注的问题,并且您需要使用已编译的查询,则不要使用DbContext API并使用ObjectContext API编写整个应用程序。对应用程序的一半使用ObjectContext,对应用程序的后半部分使用DbContext必须导致代码重复。

DbContext API有一些限制,它可能不会在不久的将来支持选择性编译查询。下一版本的EF将提供自动编译和重用所有LINQ查询的可能性。