最近发现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之前的版本。
特在博问寻求帮助!
呵呵,对EF不熟,纯属围观园长。
看来只能用 EF 5.0以上了。您的这些操作都不支持。