IObjectSet包含CompiledQuery的扩展方法错误

时间:2010-04-16 20:23:09

标签: entity-framework-4

在我的Custom ObjectContext类中,我将实体集合公开为IObjectSet,因此可以对它们进行单元测试。当我在编译查询中使用此ObjectContext并调用“Include”扩展方法(来自Julie Lerman的博客http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-5-iobjectset/)时,我遇到了一个问题:

    public IQueryable<MyPocoObject> RunQuery(MyCustomContext context, int theId)
    {
        var query = CompiledQuery.Compile<MyCustomContext, int, IQueryable<MyPocoObject>>(
             (ctx, id) => ctx.MyPocoObjects.Include("IncludedPocoObject").Where(n => n.IncludedPocoObject.id == id));

        return query(context, theId);
    }

LINQ to Entities无法识别方法'System.Linq.IQueryable 1[MyPocoObject] Include[MyIncludedPocoObject](System.Linq.IQueryable 1 [MyPocoObject],System.String)'方法,并且此方法无法转换为商店表达式。

如果我在ObjectSet集合而不是IObjectSet上使用相同的查询,它可以正常工作。如果我只是运行此查询而不预编译它工作正常。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

我确信我只是误解了你似乎已经看了一段时间 - 但是你不应该包括ObjectSet而不是那个对象集查询的对象。

例如:

var query = CompiledQuery.Compile<MyCustomContext, int, IQueryable<MyPocoObject>>(
     (ctx, id) => ctx.MyPocoObjects.Include("IncludedPocoObjectSET").Where(n => n.IncludedPocoObject.id == id));

你能否确认在没有编译的情况下运行相同的查询不会抛出“无法翻译”的异常?