包含在已编译的查询中

时间:2012-06-06 14:46:34

标签: c# performance entity-framework data-access compiled-query

我正在尝试识别和改进WCF服务中的一些热点。其中一个查询使用了大量的Include语句。 SQL服务器性能是阳光和棒棒糖,但EF性能非常糟糕。

将这个怪物分解成几个较小的查询已经帮助了很多,将一些查询转换为CompiledQueries也为整个执行时间创造了奇迹。

可悲的是,EF似乎缺乏在CompiledQuery中正确处理Include语句的可能性,抛出异常说:

LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[xx] Include[xxx](System.Linq.IQueryable`1[xxx], System.String)' method, and this method cannot be translated into a store expression.

编译后的查询看起来像这样:

        private static readonly Func<OurContext, Guid, IQueryable<MyType>> GetResidenceAccessForSubscriber =
        CompiledQuery.Compile<OurContext, Guid, IQueryable<MyType>>(
        (context, value) => (
            from t in context.MyType.Include("Stuff.MoarStuff")
            where t.Id == value
            select t));

虽然原件看起来像(并且有效):

var q = (
                        from tin container.MyType
                        where t.Id == id
                        select t)
                            .Include("Stuff.MoarStuff");

任何提示?

0 个答案:

没有答案