2011-09-23 2 views
0

저는 엔티티 프레임 워크와 MySQL을 사용하고 있습니다. 우리는 클래스개체 집합이 이미 만들어 졌음을 어떻게 알 수 있습니까?

public class DataBaseContext : ObjectContext, IDbContext 

방법

public IEnumerable<T> Find<T>(Func<T, bool> whereClause) where T : class 
     { 
      return CreateObjectSet<T>().Where(whereClause); 
     } 

가있다 내가 메서드를 호출 할 때마다 ObjectSet 생성하지 않는 방법이 있나요 만들어? 이미 있는지 확인할 수 있습니까?

답변

0

으악. 너무 나쁜 방법입니다. Expression<Func<>>이 아니라 Func<>을 전달하고 있습니다. 즉, 메서드를 실행할 때마다 EF는 T에 매핑 된 데이터베이스 테이블의 모든 레코드를 가져 와서 응용 프로그램의 메모리에서 필터링을 실행합니다. 객체 세트를 만드는 것이 두려워해야 할 마지막 사항입니다.

어쨌든 개체 집합을 만드는 것은 비싼 작업이 아니어야하며 개체 컨텍스트 인스턴스 내에 "로컬 캐싱"을 구현해야 할 때마다 만들지는 않습니다.

+0

내가 그렇게하려고 한 이유는 성능이 아닙니다. "이 Connection과 연결된 열린 DataReader가 이미 있습니다. 먼저 닫아야합니다." 예외 및 시도 어떻게 든이 문제를 극복하십시오 –

+0

그 문제는 절대적으로 개체 집합과 관련이 없습니다. 동시 작업 (다중 스레드)을 위해 컨텍스트 인스턴스를 사용하거나 [여기]에서 언급 한 문제가 있습니다 (http://stackoverflow.com/questions/4867602/entity-framework-there-is-already-an-open-datareader -associated-with-this-comman/4868569 # 4868569). 너의 대답에 대해 –

+0

고마워. 나는 어제 그 지위를 보았다. 이제 어떻게 도와 줄 수 있는지 알아 내려고 노력 중입니다. –