2010-04-16 2 views
1

내 사용자 정의 ObjectContext 클래스에는 유닛 테스트가 가능하도록 IObjectSet으로 노출 된 엔티티 콜렉션이 있습니다. 나는 (줄리 러먼의 블로그 http://thedatafarm.com/blog/data-access/agile-entity-framework-4-repository-part-5-iobjectset/에서) 컴파일 된 쿼리에서이 ObjectContext를을 사용하여 "포함"확장 메서드를 호출 할 때 나는 문제에 실행 한 : 엔티티에IObjectSet은 CompiledQuery로 확장 메소드 오류를 포함합니다.

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는 방법 '을 인식하지 못합니다을 System.Linq .IQueryable 1[MyPocoObject] Include[MyIncludedPocoObject](System.Linq.IQueryable 1 [MyPocoObject], System.String) '메서드를 사용하고이 메서드를 저장소 식으로 변환 할 수 없습니다.

IObjectSet보다는 ObjectSet 컬렉션에서이 동일한 쿼리를 사용하면 정상적으로 작동합니다. 프리 컴파일없이이 쿼리를 단순히 실행하면 올바르게 작동합니다. 내가 여기서 무엇을 놓치고 있니?

+0

동일한 문제가 발생했습니다. 해결책을 찾았습니까? – Paul

답변

0

잠시 동안 당신이 이것을보고있는 것처럼 나는 오해했습니다.하지만 그 객체 세트에 의해 쿼리 된 객체가 아니라 ObjectSet을 포함해서는 안됩니다.

예 :

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

당신이 또한 확인 할 수있는 "변환 할 수 없습니다"예외를 throw하지 않습니다 컴파일하지 않고 동일한 쿼리를 실행?

+0

다음은 IobjectSet을 사용할 때 throw되는 ObjectSet을 사용할 때 사용하지 않는 쿼리의 예입니다. private static readonly Expression >> expression = (database, slug) => database.SiteAnnouncements. Include ("UserCreated"). 여기서 (sa => sa.Site.Slug == slug); 개인 정적 읽기 전용 Func <데이터베이스, 문자열, IEnumerable > compiledQuery = CompiledQuery.Compile (expression); – Paul

+0

완전한 오류 : LINQ to Entities가 'System.Linq.IQueryable' 메서드를 인식하지 못합니다. [PostHope.Core.DomainObjects.SiteAnnouncement] [SiteAnnouncement] 포함 (System.Linq.IQueryable'1 [PostHope.Core.DomainObjects.SiteAnnouncement] , System.String) '메서드를 호출하고이 메서드를 저장소 표현식으로 변환 할 수 없습니다. – Paul

+0

그래, 내 깊이가 너무 작아서 사과하지 않을 수도 있습니다. 인터페이스를 통해 개체 세트를 참조 할 때 정의 오브젝트의 메소드가 아닌 인터페이스에 표시되는 메소드의 메소드 - 인터페이스에없는 컴파일 (반사기로 점검) 후 오브젝트 세트의 메소드/특성에 특별한 속성 또는 컴파일러 힌트가 있습니까? – Basic

관련 문제