在我的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上使用相同的查询,它可以正常工作。如果我只是运行此查询而不预编译它工作正常。我在这里缺少什么?
答案 0 :(得分:0)
我确信我只是误解了你似乎已经看了一段时间 - 但是你不应该包括ObjectSet而不是那个对象集查询的对象。
例如:
var query = CompiledQuery.Compile<MyCustomContext, int, IQueryable<MyPocoObject>>(
(ctx, id) => ctx.MyPocoObjects.Include("IncludedPocoObjectSET").Where(n => n.IncludedPocoObject.id == id));
你能否确认在没有编译的情况下运行相同的查询不会抛出“无法翻译”的异常?