2012-05-03 4 views
1

과실로 인한 데이터베이스 호출의 양을 최소화하기 위해 필요한 엔티티를 표시하기 전에 미리로드해야한다는 요구 사항을 만들고 싶습니다. 그것은 반환하기 전에 컬렉션을 테스트하기 위해 NHibernate를 강제 할 수 있습니까?간결하게 미리로드하지 않는 한 NHibernate에서 참조/컬렉션을로드하지 않는 방법은 무엇입니까?

개체를 반환하기 전에 NHibernateUtil.IsInitialized()을 확인하는 것과 같은 것을 염두에 두었습니다. 모든 속성에 대해 수동으로 수행하지 않고 전역 적으로 구현하는 방법을 모르겠습니다.

참고 : 전체 응용 프로그램에 대해 열망하는로드를 사용하지 않고 조금 더 똑똑한 지연로드를 도입하고자합니다.

답변

0

소비자는 열심히로드해야하는 경로를 지정해야하며 DAL은 경로를 eagerload하기 위해 SetFetchMode/Fetch를 사용해야합니다. 모든 데이터가 반입됩니다.

대답 코멘트하기 :

  • session.Close() 세션
  • session.Clear()을 멀리 던져로드 된 데이터 중 하나

    를 가진 후 것은
  • session.Evict(obj)가 OBJ 및 관련 기관

예를 들어, 분리 모든 인스턴스를 분리

foreach (var item in queryresults) 
{ 
    session.Evict(item); 
} 

모든 초기화되지 프록시와 컬렉션 지금은 당신이 나를 이해 확실하지 않다 LazyLoadExceptions에게

+0

가 발생합니다, 제가 예를 주자 : 나는'쿼리 book' 내가 열심히 한 후'pages'을 내가 할 수 가져올 경우 'book.pages'를 통해 모든 페이지를보십시오. 그러나'book'을 쿼리하고 * fetch 페이지를 가져 오지 않으면'book.pages'가 예외를 던지길 원합니다. – Shagglez

관련 문제