2011-04-19 5 views
1

ORM을 사용할 때 나는 보통 데이터 소스를 쿼리하는 데 사용할 DataContext/ObjectContext 인스턴스를 반환하는 팩토리 메서드를 만듭니다. 나는 보통 공장들이 기본 컨텍스트 클래스를 반환하도록한다. 그래서 EF4의 경우 생성 된 "MyDBConext"인스턴스와 반대로 ObjectContext 유형 인스턴스를 반환합니다. 메소드 서명은 다음과 같은 :EF4 Eager ObjectContext 기본 인스턴스를 통해로드

ObjectContext CreateContext() 

이 createContext의 방법은 거짓 LazyLoadingEnabled = 및 ProxyCreationEnabled = 거짓 옵션 인스턴스를 반환합니다. 엔터티 컬렉션에 액세스 할 때 ctx.CreateObjectSet()과 같은 것을 호출 할 것입니다. 여기서 T는 물론 엔터티 형식입니다.

나는 "MyDBConext"와 반대로 ObjectContext 유형 인스턴스를 사용할 때 열망하는로드가 작동하지 않는 것으로 나타났습니다.

User result = null; 
using(ObjectContext ctx = ContextFactory.CreateContext()) { 
       ObjectSet<User> userSet = ctx.CreateObjectSet<User>(); 
       //userSet.Include(x => x.Roles); 
       userSet.Include("Roles"); 
       result = userSet.SingleOrDefault(exp);     
     } 
     return result; 

그러나 예상대로

using(MyDBConext ctx = new MyDBConext()) { 

작품처럼 뭔가 using 문을 변경. 하지만 왜? 기본 ObjectContext 인스턴스를 통해로드 할 수 있습니까? 여기

답변

0

내가 내 문제

User result = null; 
using(ObjectContext ctx = ContextFactory.CreateContext()) { 
    ObjectSet<User> userSet = ctx.CreateObjectSet<User>();    
    result = userSet.Include("Roles").SingleOrDefault(exp);     
} 
return result; 

나는이 ObjectSet /하여 ObjectQuery의 현재 인스턴스 변경 include 문을 생각하고 그것을 반환을 해결하는 방법입니다. 나는 가장 유창한 API가 어떻게 작동하도록 설계되었는지 생각했습니다. 인라인 포함 및 메서드 호출 연결을 배치하면 쿼리 결과가 예상대로 생성됩니다. 이것은 EF의 유창한 API에 대한 흥미로운 "사실"입니다

관련 문제