1

我正在尝试识别和改进 WCF 服务中的一些热点。其中一个查询使用了大量的 Include 语句。SQL server 性能是阳光和棒棒糖,但 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");

有小费吗?

4

0 回答 0