首页 新闻 搜索 专区 学院

Entity Framework中使用Compiled Query的问题

0
悬赏园豆:100 [待解决问题]

最近发现Entity Framework有一个奇怪的性能问题——“EF 3秒耗时问题”,在第一次执行第一个LINQ to Entities查询时,会耗时3秒,然后在运行过程中会时不时地出现3秒耗时现象。

准备在Entity Framework中使用Compiled Query,看是否能解决这个问题,但在使用Compiled Query时又遇到新问题。

Compiled Query是针对ObjectContext的(详见MSDN),而我们用的是Entity Framework 4.3.1,EF从4.0版本开始引入DbContext,所以EntitiesContext是从DbContext继承的,无法直接传递给CompiledQuery.Compile()方法。

Compiled Query的代码如下:

private static readonly Func<ObjectContext, Guid, int> compiledQuery =
CompiledQuery.Compile((ObjectContext context, Guid postUserId) =>
context.CreateObjectSet<Comment>()
.Where(c => c.Commenter.UserId == postUserId)
.Select(c => c.ID)
.Count());

调用代码如下:

compiledQuery.Invoke(((IObjectContextAdapter)base.UnitOfWork).ObjectContext, postUserId);

注:base.UnitOfWork继承自DbContext。

运行后,出现错误:

LINQ to Entities does not recognize the method 'System.Data.Objects.ObjectSet`1[BlogServer.Domain.Entities.Comment] CreateObjectSet[Comment]()' method, and this method cannot be translated into a store expression.

折腾半天也没找到解决方法,网上找到的都是针对Entity Framework 4.0之前的版本。

特在博问寻求帮助!

dudu的主页 dudu | 高人七级 | 园豆:38946
提问于:2012-03-07 14:52
< >
分享
所有回答(2)
0

呵呵,对EF不熟,纯属围观园长。

I,Robot | 园豆:9563 (大侠五级) | 2012-03-08 02:25
0

 看来只能用 EF 5.0以上了。您的这些操作都不支持。

ChatinCode | 园豆:2272 (老鸟四级) | 2012-03-12 16:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册